转自 http://www.cnblogs.com/jiejie_peng/archive/2010/04/08/1707195.html
C# 3.0 新特性----扩展方法
- 主要目的
掌握对一个已经编译的类的方法的扩展 - 特别注意
a. 扩展某个类时,新建的类要使用 public static 修饰,因为默认的类是 internal 访问修饰符
b. 这个类要有文件作用域,即不能作为嵌套类使用
c. 扩展方法要声明为静态的
d. 扩展方法的第一个参数类型即是要扩展的类,且该参数前要加 this 关键字
e. 扩展类的命名很重要,当NET Framework 类库更新时,若更新后的类库中,添加了与你先前自定义的静态扩展类相同的类名,则会隐藏掉自定义的静态扩展类 - 具体实现
如下代码实现添加一个扩展 object 类的方法,因为 .net 中所有的类都继承自 object 类,故调用时,随意选择了 int 类型
代码如下:代码
1 public static class ExtendObject
2 {
3 public static void ShowTypeInfo(this object obj)
4 {
5 Console.WriteLine("my datatype is {0}", obj.GetType().Name);
6 }
7 }调用时的代码如下:
可以有两种调用方法:一是实例调用,二是扩展类名调用代码
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int a = 192;
6 //使用类实例调用静态方法
7 a.ShowTypeInfo();
8
9 //使用静态类名调用静态方法
10 ExtendObject.ShowTypeInfo(a);
11 Console.Read();
12 }
13 }
特别需要注意的是,扩展类与被扩展的类是两个不同的类,故扩展类中的类方法访问被扩展类的成员时,只能访问声明为 public 修饰符的成员。代码如下:
被扩展的类:Bird
class Bird
{
private string _bType;
public string BType
{
get;
set;
}
}扩展类 ExtendBird
1 public static class ExtendBird
2 {
3 public static void SetBirdType(this Bird b, string birdType)
4 {
5 //公共属性,可以访问
6 b.BType = birdType;
7
8 //会出现编译错误
9 _bType = birdType;
10 }
11 }