C#学习第十天 |
该类仅有一个方法,它允许我们触发事件。请注意,你必须进行事件域成员不为null的检测,因为可能会出现没有客户对事件感兴趣这种情况。 TestApp类包含了Main 方法,也包含了另外两个方法,它们都具备事件所必需的信号。其中一个方法是静态的,而另一个是实例方法。 EventSource 被实例化,而静态方法CatchEvent被预关联上了 TextOut事件: 从现在起,当事件被触发时,该方法被调用。如果你对事件不再感兴趣,简单地取消关联:evsrc.TextOut -= new EventHandler(CatchEvent); 注意,你不能随意取消关联的处理函数——在类代码中仅创建了这些处理函数。为了证明事件处理函数也和实例方法一起工作,余下的代码建立了TestApp 的实例,并钩住事件处理方法。 5.5 应用修饰符 在这一章的学习过程中,你已经见过了象public、virtual等修饰符。欲以一种易于理解的方法概括它们,我把它们划分为三节: 。类修饰符 5.5.1 类修饰符 到目前为止,我还没有涉及到类修饰符,而只涉及到了应用于类的存取修饰符。但是,有两个修饰符你可以用于类: abstract——关于抽象类的重要一点就是它不能被实例化。只有不是抽象的派生类才能被实例化。派生类必须实现抽象基类的所有抽象成员。你不能给抽象类使用sealed 修饰符。 sealed——密封 类不能被继承。使用该修饰符防止意外的继承,在.NET框架中的类用到这个修饰符。 清单 5.12 抽象类和密封类 1: using System;
2: 3: abstract class AbstractClass 4: { 5: abstract public void MyMethod(); 6: } 7: 8: sealed class DerivedClass:AbstractClass 9: { 10: public override void MyMethod() 11: { 12: Console.WriteLine("sealed class"); 13: } 14: } 15: 16: public class TestApp 17: { 18: public static void Main() 19: { 20: DerivedClass dc = new DerivedClass(); 21: dc.MyMethod(); 22: } 23: } 5.5.2 成员修饰符 与有用的成员修饰符的数量相比,类修饰符的数量很少。我已经提到了一些,这本书即将出现的例子描述了其它的成员修饰符。 以下是有用的成员修饰符: abstract——说明一个方法或存取标志不能含有一个实现。它们都是隐式虚拟,且在继承类中,你必须提供 override关键字。 |