C#扩展方法用于扩展指定类型的功能。扩展方法可以单独定义在外部程序集中。
本例中首先建立一个外部类项目ExtMethodDefine,定义一个类Tool,而且此类必须是静态的非泛型的。代码如下:
然后定义一个主程序项目ExtMethod,类名为ExtMethod,因为要调用扩展方法,添加刚才建立的外部程序集ExtMethodDefine.dll,导入命名空间ExtMethodDefine。
运行结果为:
1、代码分析
扩展方法第一个参数代表被扩展的类型实例,必须用this修饰,在扩展方法(this Object e)里,this修饰第一个参数是object,即所有类型都可以调用这个方法,所以声明4个不同类型的变量a,b,c,d,都可以调用扩展方法DisTestObj()。
在扩展方法DisTestStr(this String e,string e2,int e3),this修饰第一个参数是string,即所有string类型都可以调用这个方法,第二个和第三个参数e2,e3才是扩展类型实例传递的第一个和第二个参数。
另外发现字符串的初值,作为this所指定的参数传递进来了。
2、定义扩展方法的方法如下所示
public static class 类名称
{
public static 返回类型 方法名称(this 被扩展类型 参数,其他参数)
{
方法体
}
}
3、总结扩展方法的特殊性主要有以下几点
1)、扩展方法所属类必须是静态非泛型,扩展方法也是静态方法
2)、扩展方法的第1个参数为被扩展的类型实例,而且必须用this修饰
3)、扩展方法从第2个参数开始,才是扩展类型实例传递的参数列表,第2个和第3个参数才是扩展类型实例传递的第1个和第2个参数,以此类推
4)、被扩展类型实例,像调用类型内部定义的方法一样来使用扩展方法
5)、扩展方法表面上像调用类型内部定义的方法一样,本质仍然是静态方法的调用,只是被扩展的类型成为了第1个参数。如:例子中x.DisTestObj();实际执行代码Tool.DisTestObj(string x)