简介
- 为现有的非静态类型添加新方法
- 没有源码的类型也可以添加新方法
- 密封类也可以添加新方法,也就是不能继承的类型
- 扩展方法:不修改类型源码,也不用继承,添加新方法
编写
- 扩展方法本质上是静态方法,扩展方法需要放在静态类中,但调用它的时候通过对象来调用
- 第一个参数类型即扩展的类型,必须用this关键字修饰。
注意事项
- C#只支持扩展方法,不支持扩展属性、扩展事件
- 必须定义在一个非嵌套的、非泛型的静态类
- 对象点出扩展方法,所以静态类不能添加扩展方法
- 如果扩展方法与类型中原有方法同名,调用原有方法
public class Program
{
public static void Main()
{
string s = "你好,世界!你好,中国!";
//这2行效果一样
s.Print();
MyExtensions.Print(s);
//对double处理
Console.WriteLine((3.14).ToInt());
//使用Linq里的扩展方法
Console.WriteLine(s.Count(r => r=='你'));
}
}
//静态类
public static class MyExtensions
{
//扩展方法第一个参数是要扩展的类,必须用this修辞
public static void Print(this string str)
{
Console.WriteLine(str);
}
public static int ToInt(this double x)
{
return Convert.ToInt32(x);
}
}