1、第7章 多 态 性,本章目标 理解多态性是如何实现系统的可扩展和可维护的 理解抽象类和具体类之间的差异 学会如何创建及使用接口和委托 理解事件与委托的关系及如何使用事件 使用运算符重载,7.1 抽象方法与抽象类,7.1.1 抽象方法,7.1.2 抽象类,7.1.1 抽象方法,基类的虚拟方法有时候不可能被调用到,这时候可定义该虚拟方法为抽象方法,抽象方法没有方法体,但非声明不可,它告诉编译器,派生类必须通过重写该方法以提供它们自己的实现。当实例方法声明包含 abstract 修饰符时,称该方法为抽象方法。虽然抽象方法同时隐含为虚拟方法,但是它不能有 virtual 修饰符。在类声明中使用 abs
2、tract 修饰符以指示类只能是其他类的基类,我们称它为抽象类。含有一个或一个以上的抽象成员的类,必须定义为抽象类。但必须注意抽象类可以不包含抽象成员。,返回,7.1.2 抽象类,在类声明中使用 abstract 修饰符以指示类只能是其他类的基类,我们称它为抽象类。含有一个或一个以上的抽象成员的类,必须定义为抽象类。但必须注意抽象类可以不包含抽象成员。,返回,7.2 接 口,一个接口定义一个协定,实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口声明可以声明零个或多个成员 ,接口的成员必须是方法 、属性 、 事件或索引器。接口不能包含常数、字段、运算符
3、、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。接口本身不提供它所定义的成员的实现,接口只指定实现该接口的类或接口必须提供的成员。所有接口成员都隐式地具有 public 访问权限。接口成员声明包含任何修饰符属于编译时错误。具体地说,接口成员包含下列任何修饰符都属于编译时错误:abstract、public、protected、internal、private、virtual、override 或 static。,7.3 委 托,7.3.1 使用委托,7.3.2 组合委托,多数情况下,调用方法时,我们指定要直接调用该方法。如果 MyClass 类有名为 Process 的方法,我们
4、通常这样调用它: MyClass myClass = new MyClass(); myClass.Process();然而,有时我们并不想直接调用一个方法我们希望能够将它作为参数传给其他方法以便其他方法可以调用它。,7.3.1 使用委托,定义和使用委托分3个步骤:声明、实例化和调用。,返回,7.3.2 组合委托,在 C# 中,委托为多路广播,这意味着它们可以同时指向多个方法。多路广播委托维护一个在调用该委托时将全部被调用的函数的列表。,返回,7.4 事 件,事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。,