摘自:
博客园博主「返回主页懒得安分」的原创文章
优快云博主「天马3798」的原创文章
功能定义
- 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
- 扩展方法是一种特殊的静态方法,第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。可以像扩展类型上的实例方法一样进行调用。
- 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。
使用规则:
- 扩展方法不能和调用的方法放到同一个类中。
- 如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。
- 第一个参数必须要,并且必须是this,这是扩展方法的标识。如果方法里面还要传入其他参数,可以在后面追加参数。
- 扩展方法所在的类必须是静态类。
- 最好保证扩展方法和调用方法在同一个命名空间下。
- 如果在不同的命名空间下,声明了同一个类型的同名的扩展方法,且两个命名空间同时引入;或者在相同的命名空间下,不同的静态类中定义了同一个类型的同名的扩展方法:会抛出编译错误“以下方法或属性之间的调用具有二义性”。
public class Person
{
public string Name { set; get; }
public int Age { set; get; }
}
public class Person2
{
//Person的扩展方法,根据年龄判断是否是成年人
public static bool GetBIsChild(this Person oPerson)
{
if (oPerson.Age >= 18)
return false;
else
return true;
}
}
public class Main
{
public void start()
{
Person wang = new Person();
wang.GetBIsChild(); //像扩展类型上的实例方法一样进行调用。
}
}