扩展方法(Extension Methods)是C#3.0时引入的新特性,相信不少人都听过而且也都用过,最多见的是在LINQ中的使用。

不只如此,在开发中,咱们也能够建立本身扩展方法,使用它来优化类的设计、简化代码。本文将简单地介绍扩展方法的概念、定义、使用场景以及要注意的点。框架
1、概念
扩展方法是一种特殊类型的静态方法。对于一个C#类型,如类(包括密封类)、值类型、接口等,扩展方法能够在不改变该类型源码的前提下,为它的实例提供新的成员。所以,若要为一个框架或第三方库的某个类型增长辅助功能,经过扩展方法就能够垂手可得地实现,这也是“扩展”的意义所在。2、如何定义
建立扩展方法很简单,有如下几个步骤:一、建立一个静态类;
二、在其中建立一个静态方法;
三、为这个静态方法添加至少一个参数,并在第一个参数前加上this关键字,这个关键字会告诉编译器当前方法是一个扩展方法。而这个方法将成为第一个参数所属类型的新成员。
如下一个典型的扩展方法,用于为枚举值提供一个可获取其DescriptionAttribute特性值的方法:

注意:只有在引用扩展方法所在的静态类的命名空间后,才能使用它;不然,直接调用会编译失败。上例中,使用该扩展方法要引用TLA.Infrastructure.Extensions命名空间。优化
3、什么时候使用
从扩展方法的概念上,不难看出,它能够用在如下几种场合:一、要为某个类型扩展功能,但没有其源码,好比某个框架或第三方库中的一个类;例如,想要获取一个列表中全部的奇数项,就能够为IList<T>接口增长一个扩展方法,这里的IList<T>接口自己是.NET框架中的接口。

二、即便能够访问原有类型的源码,也可使用扩展方法为它添加辅助功能;this

三、重用代码,使代码更简洁;因为扩展方法封装了一段完整的逻辑,因此,使用扩展方法就避免了复制粘贴代码的状况。上例中扩展方法的内容也符合这种使用场景。spa