C#-拓展方法
概念:为现有的非静态变量类型,添加方法
语法:
访问修饰符 static 返回值 函数名(this 拓展类名 参数名, 参数类型 参数名,参数类型 参数名....){}
而public static void F(this Console()){ }
是错的。Console是静态类不可以为静态类添加方法
作用:
提升程序拓展性
不需要继承来添加方法
为别人封装的类型写额外的方法
不需要在对象中重新写方法特点:
静态类中的静态方法
第一个参数,代表拓展的目标类
第一个参数前面一定要加 this
注意:可以有返回值 和 n个参数,根据需求而定
成员方法是需要实例化对象后才能使用,第一个参数代表声明的该类型的对象。在调用拓展方法时,第一个参数不参与 参数赋值。(示例:为String类型书写拓展方法)
例:为int类拓展成员方法
static class Tools{
//成员方法 是需要 实例化对象后 才 能使用的
//value 代表 使用该方法的 实例化对象
public static void SpeakValue(this int value)//为int类型拓展了一个方法{
//拓展的方法 的逻辑
Console.WriteLine("int拓展的方法" + value);
}
}
----------------------------------
调用拓展方法
int i = 10;//这里的i就是value
i.SpeakValue();
例:为string类拓展成员方法
static class Tools{
public static void SpeakStringInfo(this string value, string str2, string str3)
//第一个参数是该类型在实例化是的对象,在调用拓展方法并传参时可以忽略,
{
Console.WriteLine("为string拓展的方法");
Console.WriteLine("调用方法的对象" + value);
Console.WriteLine("传的参数" + str2 + str3);
}
}
----------------------------------
调用拓展方法
string str = "000";
str.SpeakStringInfo("小明", "111");
例:为自定义类拓展成员方法
//拓展方法的合集
static class Tools{
//为自定义的类型拓展方法
public static void Fun3(this Test t)//注意Test不可以是静态的
{
Console.WriteLine("为test拓展的方法");
}
}
-----------------------
调用拓展方法
Test t = new Test();//如果拓展方法与其成员方法重名,则只会调用成员方法
t.Fun2();