扩展方法,就是在不修改类文件的情况下,为类添加新方法。c# 4.0中大量使用了扩展方法,如Linq查询的GroupBy、OrderBy、Average等方法。
eg: 在不修改System.String的情况下,为 System.String 类定义的一个扩展方法WordCount
//定义代码 namespace ExtensionMethods { public static class MyExtensions { //定义扩展方法WordCount public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } }
调用方式1:使用实例方法 (推荐使用此方法)
//调用代码 using ExtensionMethods; ... string s = "Hello Extension Methods"; int i = s.WordCount(); ...
调用方式2:使用静态方式
int i = MyExtensions.WordCount(s);
限制:
1、只能在静态类中定义扩展方法,且扩展方法自身必须是一个静态方法。
2、扩展方法中的首个参数必须是this,最后紧跟要扩展的类的名称。
3、扩展方法可以被正确的对象实例调用,也可以使用静态类名静态的调用。
4、扩展方法不要重名,否则扩展方法将不能被调用到。
5、扩展方法无法访问它们所扩展的类型中的私有变量。因为扩展方法是静态方法,并不属于类成员中的标准方法,因此不能直接进行访问。
6、在调用扩展方法时,需要引用定义扩展方法的命名空间。
2、扩展方法中的首个参数必须是this,最后紧跟要扩展的类的名称。
3、扩展方法可以被正确的对象实例调用,也可以使用静态类名静态的调用。
4、扩展方法不要重名,否则扩展方法将不能被调用到。
5、扩展方法无法访问它们所扩展的类型中的私有变量。因为扩展方法是静态方法,并不属于类成员中的标准方法,因此不能直接进行访问。
6、在调用扩展方法时,需要引用定义扩展方法的命名空间。