C#3.0中的扩展方法

在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能.

    在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法,从而很容易地扩展原有的功能.

1、扩展方法的定义 代码生成器

定义扩展方法时,首先这个扩展方法要被定义在一个静态类中(程序集加载时自动加载),因此这个扩展方法也必须是一个静态方法。其次,在扩展方法的参数列表中,需要在第一个参数类型的前面添加关键字this作为修饰符,而紧跟其后的就是扩展类的名称。如下所示:

代码:扩展方法的定义

static class MyExtensions    {        public static string  GetAssemblyName(this object obj)        {             return obj.GetType().Name;        }    }

在上述代码中,定义了一个静态类MyExtension,其中定义了一个扩展方法GetAssemblyName()。在该方法的参数列表中,使用了关键字this来修饰object类型,将扩展方法与object相关联。因此,对于任何object对象和继承了object类的类,都可以使用GetAssemblyName()方法,从而扩展了object的方法。

2、扩展方法的使用

    使用扩展方法,既可以调用关联类型实例化对象的扩展方法,也可以直接调用静态类中的扩展方法,其中的方法参数输入关联类型。

代码: 实例化对象的扩展方法

 

static void Main(string[] args)        {            object obj = new object();            obj.GetAssemblyName();        }

在代码中,定义了一个object类型的参数obj,并调用obj类型的扩展方法GetAssemblyName,获取Assembly的名称.

当书写代码时,在VS环境中,开发者可以利用只能感知功能,比较容易地选择扩展方法.如下图所示:


 

此外还可以针对泛型类型添加扩展方法,这样开发者就可以在制定的泛型类中使用扩展方法。俺还不是很理解泛型,暂时不显摆了。

posted @ 2014-11-25 17:39  zzg168  阅读(208)  评论(0编辑  收藏  举报