这篇内容继续接着昨天的Lambda表达式的源码继续下去。昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性。
一.扩展方法介绍
废话不多说,先上源码截图:
上图中GetMemoryCount就是一个扩展方法,从上图的标注可以得出以下几点信息:
1.扩展方法需要加this关键词
2.扩展方法和被包含的类必须是静态的
3.被包含的类不能是泛型类
深入总结:
1.扩展方法可以接收任意多个参数,不过第一个参数必须用this修饰。
2.扩展方法的基础是对象, 比如这个对象突然想额外加一个方法,那可以用扩展方法,第一个参数就是以这个对象为基础的参数。(扩展方法的基石是对象)
二.扩展方法的智能感知
当你扩展方法代码编写完成,并且没有问题的时候。你调用此对象的扩展方法时,IDE会有智能感知,见下图箭头处:
在上图中,也可以看到扩展方法的图标也不一样,是带有蓝色下坠标示。
三.扩展方法的链式语句
在上图可以看到,扩展方法带来的好处是可以进行语句的链式操作。
四.扩展方法和正常方法的冲突
先上源码:
从上图可以看到,在对象中没有找到对应的方法,就会去执行扩展方法(object是所有的基类)。执行结果: