概述
扩展方法是一种特殊的静态方法,可以像扩展类型上的实例方法一样进行调用,能向现有类型“添加”方法,而无须创建新的派生类型、重新编译或以其他方式修改原始类型。
扩展方法的定义实现:
public static class StringUtil { public static void WriteSelf(this string strSelf, int year) { Console.WriteLine(string.Format("我是{0}人,今年是{1}年。", strSelf, year)); } }
扩展方法的调用:
string str = "冷水江"; str.WriteSelf(2016); //在编译时会将 str.WriteSelf(2016) 替换成:StringUtil.WriteSelf(str, 2018);
编译器认为一个表达式要使用一个实例方法,但是没有找到,需要检查导入的命名空间和当前命名空间里所有的扩展方法,并匹配到适合的方法。
注意:
(1)实例方法优先于扩展方法(允许存在同名实例方法和扩展方法)
(2)可以在空引用上调用扩展方法。
(3)可以被继承。
(4)并不是任何方法都能作为扩展方法使用,必须有以下特征:
它必须放在一个非嵌套、非泛型的静态类中。
它至少有一个参数。
第一个参数必须附加 this 关键字。
第一个参数不能有任何其他修饰符(out/ref)
第一个参数不能是指针类型,其类型决定是在何种类型上进行扩展。