本章新知识点有:
1、扩展方法
有许多扩展类的方式。如果有类的源代码,继承就是给对象添加功能的好方法。 但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源
代码。
扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money类需要一个方法AddToAmomtrdec涮 am。mtToAdd,。 但是,由于某种原因,程序集最初的源代码不能直接修改。此时必须做的所有工作就是创建一个静态类,把方法 AddToAmountO添加为一个静态方法。对应的代码如下:
namespace Wrox
(
public statio class MoneyExtension
(
public static void AddToAmount(this MOney money` decimal amountToAdd)
(
money.Amount += amountToAdd`
)
)
)
注意AddToAmomjO方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在血s关键字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个例子中,Money是要扩展的类型。在扩展方法中,可以访问所扩展类型的所有公有方法和属性。
在主程序中,AddToAmomtO方法看起来像是另一个方法。它没有显示第一个参数,也不能对它进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:
即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用 cash1实例变量来调用AddToAmountO,而没有使用类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。
2、结构与类的区别:a:结构存在堆中,类放在堆中。b:结构是值类型继续自System.ValueType,类是引用类刑。c:结构不能继承,类可以。d:结构可以不实例化就使用,但类不行。