[转] .net 3.5新特性之用this关键字为类添加扩展方法
具体用法如下:
public static class ClassHelper
{
//用this 声明将要吧这个方法附加到Student对象
public static bool CheckName(this Student stu)
{
if (stu.Name == "小明")
{
return true;
}
else
return false;
}
//为String对象添加一个ChangeString 方法
public static string ChangeString(this String s,string str)
{
return str + ":" + s;
}
}
public class Student
{
public string Name { get; set; }
public void Show()
{
this.CheckName();//Student拥有了CheckName这个方法
}
public void ShowString()
{
string s = "aaa";
s.ChangeString("哈哈");//String拥有了ChangeString这个方法
}
}
这个例子很简单,为自定义的Student类扩展了一个CheckName方法,该方法没有参数,然后又为String系统自带的类 扩展了一个ChangeString 方法,该方法有一个string 类型的参数,注意:扩展方法必须声明为static静态方法,并且放在静态类中。
this不仅可以扩展类方法,还可以扩展接口,使得任何继承自该接口的类都会拥有此扩展方法。这里我们修改上面这个例子:
{
//用this 声明将要吧这个方法附加到IStudent对象
public static bool CheckName(this IStudent stu)
{
if (stu.Name == "小明")
{
return true;
}
else
return false;
}
//为String对象添加一个ChangeString 方法
public static string ChangeString(this String s, string str)
{
return str + ":" + s;
}
}
public interface IStudent
{
public void Show();
public string Name { get; set; }
}
public class StudentA : IStudent
{
public void Show()
{
this.CheckName();//Student拥有了CheckName这个方法
}
public void ShowString()
{
string s = "aaa";
s.ChangeString("哈哈");//String拥有了ChangeString这个方法
}
}
public class StudentB : IStudent
{
public void Show()
{
this.CheckName();//Student拥有了CheckName这个方法
}
public void ShowString()
{
string s = "aaa";
s.ChangeString("哈哈");//String拥有了ChangeString这个方法
}
}
,注意这个例子的CheckName由this Student 改成了 this IStudent,IStudent 是一个接口,StudentA和StudentB都继承了这个接口,他们都会拥有CheckName这个扩展方法。
显然这样做是有好处的,当第三方提供给你一个DLL,其中包括许多类,由于这些类都是封装在DLL中的,当你想扩展其中某个类的时候,你却不能修改类的源代码。这时候你就可以用this来扩展。。。。

浙公网安备 33010602011771号