C# 3.0 新特性----扩展方法

转自 http://www.cnblogs.com/jiejie_peng/archive/2010/04/08/1707195.html

C# 3.0 新特性----扩展方法

  1. 主要目的
    掌握对一个已经编译的类的方法的扩展
  2. 特别注意
    a. 扩展某个类时,新建的类要使用 public static 修饰,因为默认的类是 internal 访问修饰符
    b. 这个类要有文件作用域,即不能作为嵌套类使用
    c. 扩展方法要声明为静态的
    d. 扩展方法的第一个参数类型即是要扩展的类,且该参数前要加 this 关键字
    e. 扩展类的命名很重要,当NET Framework 类库更新时,若更新后的类库中,添加了与你先前自定义的静态扩展类相同的类名,则会隐藏掉自定义的静态扩展类 
  3. 具体实现
    如下代码实现添加一个扩展 object 类的方法,因为 .net 中所有的类都继承自 object 类,故调用时,随意选择了 int 类型
    代码如下:

    C# 3.0 新特性----扩展方法C# 3.0 新特性----扩展方法代码
    
    
    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 }

    调用时的代码如下:
    可以有两种调用方法:一是实例调用,二是扩展类名调用

    C# 3.0 新特性----扩展方法C# 3.0 新特性----扩展方法代码
    
    
    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 }
 
上一篇:接入设计 |带你读《5G 无线系统设计与国际标准》之九


下一篇:《Microduino实战》——1.3 开源软件