问题
阅读源码的时候,发现某个对象调用了没有在它的类中定义的方法,这是怎么回事呢?
原来使用了扩展方法。
扩展方法
给C#内置对象或自定义对象添加扩展方法,那么在同一个命名空间下面定义的所有的该类对象都可以直接调用此扩展方法。
使用时需要注意:
(1)扩展方法不能和调用的方法放到同一个类中
(2)第一个参数必须要,并且必须是this,这是扩展方法的标识。如果方法里面还要传入其他参数,可以在后面追加参数
(3)扩展方法所在的类必须是静态类
(4)最好保证扩展方法和调用方法在同一个命名空间下
向string类添加扩展方法的示例
添加一个GetNotNullStr的扩展方法:
public static string GetNotNullStr(this string strRes)
{
if (strRes == null)
return string.Empty;
else
return strRes ;
}
在Main函数中调用:
static void Main(string[] args)
{
string strTest = null;
var strRes = strTest.GetNotNullStr();
}
向string类添加扩展方法的示例
定义Person类:
public class Person
{
public string Name { set; get; }
public int Age { set; get; }
}
定义一个Person类的扩展方法:
public static class PersonExtensions{
//Person的扩展方法,根据年龄判断是否是成年人
public static bool GetBIsChild(this Person oPerson)
{
if (oPerson.Age >= 18)
return false;
else
return true;
}
}
调用:
static void Main(string[] args)
{
var oPerson1 = new Person();
oPerson1.Age = 20;
//调用扩展方法
var bIsChild = oPerson1.GetBIsChild();
}