C#3.0/3.5以后增加了“扩展方法”
扩展方法是一种特殊的静态方法,可以像扩展类型上的实例方法一样进行调用,能向现有的类型(比如int,string,float,double等)“添加”方法,而无需创建新的派生类、重新编译或者以其他方式修改原始类型。
电脑:ThinkPad T570
系统:win10
开发环境:VS2019
例:
新建一个winform窗口程序,在类Form1外增加一个自定义类,命名未CusIntUtil,代码如下:
public static class CusIntUtil
{
public static void WriteSelf(this int nSelf)
{
Trace.WriteLine(string.Format("int value = {0}",nSelf));
}
public static void WriteSelf(this string str)
{
Trace.WriteLine(string.Format("str value = {0}", str));
}
}
界面添加一个按钮,如下:
双击扩展方法测试按钮,增加相关代码:
private void button2_Click(object sender, EventArgs e)
{
int n = 100;
n.WriteSelf();
string str = "扩展方法";
str.WriteSelf();
}
运行后点击按钮,在输出窗口就会显示:
注意点:
1.实例方法优先于扩展方法(允许存在同名实例方法和扩展方法)。
2.可以在空引用上调用扩展方法(string和class统称为引用类型,int,long,struct等为值类型)。
3.可以被继承。
4.扩展方法必须放在一个非嵌套,非泛型的静态类中,即:CusIntUtil类一定要写在Form1类外,如果写在Form1类内部则会报错。
5.他至少又一个参数,而且第一个参数必须附加 this 关键字,第一个参数不能又任何其他修饰符(out/ref),第一个参数不能是指针类型,并且其类型决定了本扩展方法是在什么类型上进行扩展的。