c#3.0(VS2008)支持在任何类型上扩展生成自定义的方法。比如说想在string类型的对象里面多一个ToInt32(),来方便的将字符转换成整形。
在实现的过程中的关键字为static和this
下面是一个string类型中新建一个ToInt32的自定义方法
public static class Extension//必须先声明一个静态类,类名随意
{
public static int ToInt32(this string In)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型为需要扩展的类型
{
return Convert.ToInt32(In);
}
}
那么在使用string的对象的时候,会多出一个ToInt32的方法
static void Main(string[] args)
{
string a = "1";
int b = a.ToInt32();
Console.ReadLine();
}
扩展方法用途:
扩展方法尤其在很多类需要同样的方法,而这些类又无法继承其它类时特别有用。当然,在要对某个类进行扩展,但我们并没有源代码时,扩展方法也可以派上用场。
注: 1. ClientClass 表示你要绑定到的类型。编译器根据这一类型来决定该方法绑定到那种类型上。
refObj 表示当前的对象。即调用者的实例的一个引用。
2. 指示绑定到的类型的参数必须由 this 修饰。从这一点可以看出。 This 关键字表示了 EnlargeClass 在当前的上下文的一个引用。
注意: refObj 并不是一个指向同一对象的指针。它是一个原对象的引用复本,是否能够影响到原对象取决于原对象的类型(引用或者值类型)。
3. 指示类型绑定的参数必须处于该方法的第一个位置。 这样编译器不会关注下面的参数列表。否则将不能通过编译。
4. 在创建扩展方法时,需要保证该方法对使用点是可访问的。
5. 如果定义了一个和原类成员相同的扩展方法,则编译器优先于原类型方法。所以,编写扩展方法时要注意不能和原类方法重名。