天天看点

C#秘密武器之扩展方法为何要用扩展方法? 扩展方法的应用备注:总结:

      作为一个.NET程序猿,我们经常要跟.net自带类库或者第三方dll类库打交道,有时候我们未必能够通过反编译来查看它们的代码,但是我们通常需要给它们扩充一些新的功能,Helper类就应运而生了,我们开发出一个个的静态方法以方便调用。久而久之,我们封装的Helper类越来越多,但是这个Helper里边的方法不一定为每个开发人员所熟知,而且我们每每要敲击XXXHelper.XXX()这种类似的方法,其实这个XXXHelper完全是可以省略掉的,等于是我们每次都多写了这么一点东西。

      有没有解决办法呢?扩展方法就是解决这个问题的。扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。它可以对现有类功能进行扩充,从而使该类型的实例具有更多的方法,伟大的LINQ就是用的这个东西实现的。

      使用扩展方法的好处:

      1、让方法调用回归面向对象本身,即方法是属于对象的,增强代码可读性

      2、从一定程度上来说扩展方法让你的类库有了无限的可能性

 扩展方法必须遵守以下规则:

      1.扩展类必须是静态非泛型的;

      2.扩展方法必须是静态的

      3.扩展方法的第一个参数必须以this开头,参数必须是原有类的类型

 举个扩展方法的栗子:

我们经常需要对对象进行序列化,那么我们可以给对象object扩展一个这样的方法ToJSON

调用:

平时我们总是需要操作字符串类型,因此这里就送上一个string类型的扩展方法类库:

C#秘密武器之扩展方法为何要用扩展方法? 扩展方法的应用备注:总结:
C#秘密武器之扩展方法为何要用扩展方法? 扩展方法的应用备注:总结:

View Code

1、在vs的智能提示中,扩展方法是带有蓝色下滑箭头的

2、如果扩展方法和被扩展类中的方法相同,会怎么样?

     扩展方法的优先级总是比类型本身中定义的实例方法低,所以与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。

3、注意你是为哪个类型进行扩展,比如你是对string类型做扩展,还是对object类型、List<object>类型做扩展,一定要明确扩展的类型范围

4、是时候尝试将你的那些Helper类库转换成扩展方法了

5、当你苦于类库里没有你想要的方法时,那就大胆的扩展吧

扩展方法本身并不难,难点在于你是否能够恰到好处地使用它,也就是说你是否知道在某个合适的时候使用它。