C# 扩展方法

有许多方法扩展类。如果有类的源代码,继承就是给对象添加功能的好方法。
但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要类的源代码。
扩展方法是静态方法,是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money
类需要一个方法AddToAmount(decimal amountToAdd)。但是,由于某种原因,程序集最初的源代码
不能直接修改。此时就可以创建一个静态类,把方法AddToAmount 添加为一个静态方法。代码如下:
namespace Chapter3.Extensions
{
public static class MoneyExtension
{
public static void AddToAmount(this Money money, decimal
amountToAdd)
{
money.Amount += amountToAdd;
}
}
}
注意AddToAmount 方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在this 关键
字的后面。这告诉编译器,这个方法是Money 类型的一部分。在这个例子中,Money 是要扩展的类
型。在扩展方法中,可以访问所扩展类型的所有公共方法和属性。
在主程序中,AddToAmount 方法看起来像是另一个方法。它没有显示第一个参数,也不能对它
进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:
cash1.AddToAmount(10M);
即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用cash1 实例变量来调用
AddToAmount,而没有使用类型名。
如果扩展方法与类中的某个方法同名,扩展方法就从来不会被调用。类中已有的实例方法优先。
posted @ 2011-05-30 09:45  Kingdom_0  阅读(327)  评论(2编辑  收藏  举报