扩展方法Extention Method的主要介绍在:http://msdn.microsoft.com/zh-cn/library/bb383977(v=vs.100).aspx。
扩展方法的意义在于:
- 能够向已存在的类型(这时称为Extended Type)添加方法,而无需修改该类型(从而实现开发-封闭原则)。这个(1)是不是有点儿类似于“装饰”模式?(2)如果已经存在的类型因为某种原因是不可修改的,或不想打开进行修改,则可以使用扩展方法为该类型添加方法。
- 可以实现依赖倒置,从而解除三个组件之间的循环依赖(注意是解除三个组件之间的循环依赖,而不是两个组件之间的依赖翻转)。怎么讲呢?如
关于扩展方法的几个要点是:
- 扩展方法被定义为“静态方法(static method)”,但是调用时使用的是“实例方法(instance method)”的语法(即在对象而非类后面写"."调用)的语法;
- “扩展方法被定义为静态方法”的含义是:扩展方法一般被定义为静态类的静态方法;这个静态方法的第一个参数指定本方法所适用的类型(称为Extended Type),该参数以this修饰符为前缀(一个静态类中是可以为多个Extended Type定义扩展方法的吧?);从这个实现上来看,扩展方法是无法访问Extended Type对象的实例成员的;
- 仅当使用using指令将包含扩展方法类的命名空间导入源代码后,才可以使用该扩展方法;
- 扩展方法的编译绑定方法决定了:(1)扩展方法不能被重写;(2)扩展方法与实例方法签名相同时,扩展方法永远不会被调用;
- 基于以上的4和其他理由,应该在必要时才使用扩展方法扩展已存在的类型(应该优先使用派生已存在类型的新类型来实现扩展的目的);