扩展一个类的方法有很多种,最好的方法是通过继承(inheritance)。extension
是另一种可以扩展类的功能方法的方式。
extension method
必须是静态方法。
public static class StringExtension
{
public static int GetWordCount(this string s) => s.Split().Length;
}
然后在方法中可以直接调用这个扩展方法了
```c#
string s = "hello world";
Console.WriteLine(s.GetWordCount());
下面再扩展一个普通类
public class B
{
public int X { get; set; }
public B(int x)
{
X = x;
}
}
public static class BExtension
{
public static int Get2x(this B b) => b.X * 2;
}
调用
B b=new B(3);
Console.WriteLine($"原有方法值{b.X}");
Console.WriteLine($"扩展方法值{b.Get2x()}");
编译器是如何找到一个类的扩展方法呢?
this关键字可以匹配这个类型的所有扩展方法,并且静态类的命名空间必须定义成public已经可访问到的。