C# 拓展方法(涉及Linq)

拓展方法


C#中,扩展方法是一种特殊的静态方法,允许开发者向现有类型"添加"新的方法,而无需修改该类型的源代码或创建新的派生类型。这种机制提供了一种更为灵活的方式来扩展已有的类或结构的功能。

C# 中的扩展方法是一种特殊的静态方法,它允许你为现有类型添加新的方法,而不需要修改原始类型。扩展方法通常用于为那些你无法修改的类型添加功能,比如 .NET Framework 中的类型。


扩展方法的定义必须在一个静态类中,并且方法的第一个参数必须使用 this 关键字,这个
参数指定了扩展方法所作用的类型


定义一个扩展方法

要定义一个扩展方法,需要遵循以下规则:

扩展方法必须在静态类中定义。

扩展方法的第一个参数要使用 this 关键字,并且这个参数指定了方法将扩展哪个类型。

第一个参数之后的参数是扩展方法所需要的其他参数。

下面是一个简单的扩展方法的例子,这个方法为 int 类型添加了一个名为 Square 的方法,用于计算整数的平方:

csharp 复制代码
public static class IntegerExtensions
{
    // 这是一个扩展方法,它扩展了 int 类型
    public static int Square(this int num)
    {
        return num * num;
    }
}

使用扩展方法

一旦定义了扩展方法,就可以像使用实例方法一样来使用它。

例如

csharp 复制代码
using System;

namespace ExtensionMethods
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = 5;
            int square = number.Square(); // 调用扩展方法
            Console.WriteLine($"The square of {number} is {square}");
        }
    }

    public static class IntegerExtensions
    {
        public static int Square(this int num)
        {
            return num * num;
        }
    }
}

在这个例子中,我们不需要修改 int 类型的定义,就可以直接调用 Square 方法。


再举个例子

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace forCode {
    class Program {
        static void Main(string[] args) {

            double a = 2;
            int b = a.Square();
            Console.WriteLine($"b = {b}");
            Console.ReadKey();
        }
    }
    public static class aa {
        public static int Square(this double num) {
            return Convert.ToInt32(Math.Pow(num, 2.0));
        }
    }

}

上述例子是double的拓展,一个double变量平方后转为int


终极例子

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace forCode {
    class Program {
        static void Main(string[] args) {

            MyNumber m = new MyNumber();
            m.a = 1;
            m.AddSome(3);
            Console.WriteLine($"m.a = {m.a}");
            Console.ReadKey();
        }
    }

    public class MyNumber {
        public int a;
    } 

    public static class MyExTention {
        public static int Square(this double num) {
            return Convert.ToInt32(Math.Pow(num, 2.0));
        }
        public static void AddSome(this MyNumber myNumber, int num) {
            myNumber.a += num;
        }
    }

}

为自定义的类添加扩展方法

注意事项

扩展方法不能访问它们所扩展的类型中的私有成员。

如果扩展方法与现有方法冲突,那么扩展方法将不会被调用。

扩展方法是一种语法糖,编译器会将它们转换为静态方法的调用。

通过使用扩展方法,开发者可以更加方便地对现有类型进行功能增强,同时保持代码的整洁和可维护性。

与Linq

Where就是一种扩展方法

相关推荐
Ivanqhz11 分钟前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_7345717614 分钟前
深入理解C++ RAII
开发语言·c++
泡海椒18 分钟前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae26 分钟前
模拟实现memset()(C语言)
c语言·开发语言·后端
wuyk5551 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
船厂电气自动化ai大模型1 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
lv__pf2 小时前
seata【实战 msb】
java·开发语言·后端
点纭2 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户788477316343 小时前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
事已至此先睡覺吧3 小时前
第三篇:Java 流程控制详解:条件判断、循环与跳转语句
java·开发语言