0
当某个类的属性和方法已经写好的时候,我们想要增加额外的功能时,却又不想改变原有的类(自定义的类)或无法改变原有的类(系统的类如 String),又该怎么办?
使用扩方法可以达到要求。
(1)扩展方法所在的类必须是静态类
(2)扩展方法不能和调用的方法放到同一个类中
(3)第一个参数必须要,并且必须是this Object,这是扩展方法的标识。如果方法里面还要传入其他参数,可以在后面追加参数
(4)最好保证扩展方法和调用方法在同一个命名空间下
例如我们想扩展系统类 String ,增加额外的一个方法 GetNoNullStr() :
//扩展方法必须在静态类中,且不能和调用的地方属于同一个类
static class My
{
private static double PI = 3.14;
private static String name = "LIUYAN";
//还可以给任何对象进行扩展,如:this object
public static String GetNoNullStr(this String str) { //this String 必须为第一个参数 表示为String类的扩展方法
if (str == null) {
return String.Empty;
}
else {
return str;
}
}
public static String GetNoNullStr(this String str, out int a) { //带一个参数a
a = 10;
if (str == null) {
return String.Empty;
}
else {
return str;
}
}
}
----------------------------------------------------------------------------------
//另一个地方,调用扩展方法
int a = 0;
String s = Console.ReadLine();
s = s.GetNoNullStr(); //s本身为参数
s = s.GetNoNullStr(out a); //除s之外,还加一个参数a
扩展自己的类和上面的使用流程一样。