扩展方法

有许多扩展类的方式。 如果有类的源代码,继承α 口 第 4章所述)就 是给对象添加功能的好方法。
但如果没有源代码
,该 怎么办?此时可 以使用扩展方法,它允许改变一个类,但不需要该类 的源 、
代码 。
扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。假定上例中的
Money
类需要一个方法 AddToAmomtrdec涮 am。 mtToAdd,。 但是,由 于某种原因,程序集最初的源代码
不能直接修改。 此时必须做的所有工作就是创建一个静态类
,把方法 AddToAmountO添加为一个静
态方法。 对应的代码如下
:

namespace Worker
(
  public statio class MoneyExtension
     (
           public static void AddToAmount〈 this MOney money, decimal  amountToAdd)
           (
                 money.Amount += amountToAdd;
           )
     }
)     

 


注意 AddToAmomjO方法的参数。 对于扩展方法,第一个参数是要扩展的类型,它放在 血s关键
字的后面。 这告诉编译器
,这个方法是 Money类型的一部分。 在这个例子中,Money是要扩展的类
型。 在扩展方法中
,可 以访 问所扩展类型的所有公有方法和属性。
在主程序中
,AddToAmomtO方 法看起来像是另一个方法 。 它没有显示第一个参数,也 不能对
它进行任何处理。 要使用新方法
,需 要执行如下调用,这与其他方法相同:
即使扩展方法是静态的,也要使用标准的实例方法语法。 注意这里使用 cash1实 例变量来调用
AddToAmountO,而 没有使用类型名。
如果扩展方法与类 中的某个方法同名
,就从来不会调用扩展方法 。 类中已有的任何实例方法
优先

posted @ 2017-08-01 17:07  帅刺猬之家  阅读(203)  评论(0编辑  收藏  举报