《第5章 面向对象高级应用PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第5章 面向对象高级应用PPT讲稿.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 面向对象高级应用第1页,共20页,编辑于2022年,星期一5.1 继承下图反映了图类的派生关系。最高层的实体往往具有最一般最普通的特征,越底下图反映了图类的派生关系。最高层的实体往往具有最一般最普通的特征,越底层的越具体,并且包含了上一层的特征,它们之间的关系就可以表现为面向对象层的越具体,并且包含了上一层的特征,它们之间的关系就可以表现为面向对象中的继承关系。中的继承关系。第2页,共20页,编辑于2022年,星期一继承的语法:继承的语法:访问修饰符访问修饰符 class 类名类名:基类名称:基类名称 例例5.1 最简单的继承示例。最简单的继承示例。P69 例例5.2 对例对例5.1进
2、行修改,在派生类进行修改,在派生类B中,分别添加一个方法及属性。中,分别添加一个方法及属性。P70例例5.3 继承中的继承中的base关键字。关键字。P71例例5.4 继承中的构造函数。继承中的构造函数。P72 第3页,共20页,编辑于2022年,星期一从例从例5.4中可见,在中可见,在C#中,构造函数的执行顺序是:中,构造函数的执行顺序是:先调用基类的构造函数,再依次调用各派生类的先调用基类的构造函数,再依次调用各派生类的构造函数。构造函数。C#中的继承符合下列规则:中的继承符合下列规则:1、继承是可传递的。如果、继承是可传递的。如果C从从B中派生,中派生,B又从又从A中派生,中派生,那么那
3、么C不仅继承了不仅继承了B中声明的成员,同样也继承了中声明的成员,同样也继承了A中的中的成员。成员。2、派生类应当是对基类的扩展。派生类可以添加新、派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。的成员,但不能除去已经继承的成员的定义。3、类可以定义虚方法、虚属性等。它的派生类能够重、类可以定义虚方法、虚属性等。它的派生类能够重载这些成员,从而实现类可以展示出多态性。载这些成员,从而实现类可以展示出多态性。第4页,共20页,编辑于2022年,星期一5.2 多态性多态性继承使得在原有的类基础之上,对原有的程序进行扩展,继承使得在原有的类基础之上,对原有的程序进行
4、扩展,从而提高程序开发的速度,实现代码的复用。同一种方从而提高程序开发的速度,实现代码的复用。同一种方法作用于不同对象可以产生不同的结果,这就是多态性。法作用于不同对象可以产生不同的结果,这就是多态性。C#中的多态包括两类:编译时多态性和运行时的多态性。中的多态包括两类:编译时多态性和运行时的多态性。编译时的多态性是通过我们前面所介绍的方法重载来实现的。编译时的多态性是通过我们前面所介绍的方法重载来实现的。运行时的多态是指直到系统运行时,才根据实际情况决定要实运行时的多态是指直到系统运行时,才根据实际情况决定要实现何种操作。现何种操作。C#中运行时的多态性是通过虚方法来实现的。中运行时的多态性
5、是通过虚方法来实现的。第5页,共20页,编辑于2022年,星期一虚方法虚方法虚方法的定义要用到虚方法的定义要用到virtual关键字关键字,如下所示:,如下所示:public class Animal public virtual void Eat()Console.WriteLine(Eat something);这样,这样,Animal 类的任何派生类都可以实现新的类的任何派生类都可以实现新的 Eat()方法。方法。第6页,共20页,编辑于2022年,星期一多态性 如果在派生类中要重写基类方法,那么需要使用如果在派生类中要重写基类方法,那么需要使用 override 关键字,如下所关键字,
6、如下所示:示:public class Cat:Animal public override void Eat()Console.WriteLine(Eat small animals);第7页,共20页,编辑于2022年,星期一抽象类和抽象方法当创建一个类时,有时候需要让该类包含一些特殊方法,该类对这些方法不提供实现,该类的派生类必须实现这些方法,这些方法为抽象方法(没有被实现的空方法)。能够包含抽象成员的类称为抽象类,包含抽象成员的类一定是抽象类,抽象类也可包含非抽象成员。抽象类不能直接实例化,也不能被密封,只能作为其它类的基类。抽象方法声明:访问修饰符 abstract 返回值类型 方法
7、名(参数列表);第8页,共20页,编辑于2022年,星期一5.3 接口接口接口是引用类型,一个接口的定义相当于一个约定。实现某接口接口是引用类型,一个接口的定义相当于一个约定。实现某接口的类或结构必须遵循该接口定义的约定。在某种程度上,接口像的类或结构必须遵循该接口定义的约定。在某种程度上,接口像一个抽象类。可以定义接口的方法、属性、索引器和事件等,但一个抽象类。可以定义接口的方法、属性、索引器和事件等,但是接口不提供成员的实现,仅指定实现该接口的类或结构所必须是接口不提供成员的实现,仅指定实现该接口的类或结构所必须提供的成员,继承接口的类必须提供接口成员的实现。提供的成员,继承接口的类必须提
8、供接口成员的实现。在前面所介绍的继承中,类无法实现多继承,即一个类只能继承在前面所介绍的继承中,类无法实现多继承,即一个类只能继承于一个基类而不能同时继承于多个基类。在于一个基类而不能同时继承于多个基类。在C#中允许一个接口中允许一个接口继承于多个接口,当继承于多个接口时,各个接口之间用继承于多个接口,当继承于多个接口时,各个接口之间用“,”号隔开。号隔开。第9页,共20页,编辑于2022年,星期一接口接口接口是引用类型,接口成员包括:接口是引用类型,接口成员包括:方法方法属性属性 索引器索引器 事件事件第10页,共20页,编辑于2022年,星期一声明接口声明接口 声明接口要使用声明接口要使用
9、 interface 关键字关键字例如:例如:interface ICarnivore bool IsHungry get;set;void Eat(Animal Victim);第11页,共20页,编辑于2022年,星期一实现实现接口接口 要实现一个接口,必须要有类继承该接口。要实现一个接口,必须要有类继承该接口。接口的实现类可以是派生类,并且这些派生类可接口的实现类可以是派生类,并且这些派生类可以包括一些自己特有的类成员。以包括一些自己特有的类成员。第12页,共20页,编辑于2022年,星期一接口与抽象接口与抽象类类的比的比较较当准备为组件提供多态性时,表当准备为组件提供多态性时,表 中的
10、建议将有助于在中的建议将有助于在抽象类和接口之间做出正确的选择。抽象类和接口之间做出正确的选择。目标选择设计小而简练的功能块接口设计大型功能单元抽象类第13页,共20页,编辑于2022年,星期一5.4 委托和事件委托委托 用用delegate关键字声明,是一种引用类型,相当于函数指关键字声明,是一种引用类型,相当于函数指针,通过委托可以对方法进行引用执行。针,通过委托可以对方法进行引用执行。委托的形式和方法一样,具有参数和返回值。同时,要委委托的形式和方法一样,具有参数和返回值。同时,要委托执行的方法也必须和所声明的委托格式一致,即具有相同的托执行的方法也必须和所声明的委托格式一致,即具有相同
11、的返回值和参数列表。返回值和参数列表。第14页,共20页,编辑于2022年,星期一委托例如:例如:class Program delegate void Sample(string message);static void Main(string args)Sample s1=method1;Sample s2=method2;Sample S3=s1+s2;S3(zhangsan);下面一条语句注释下面一条语句注释 s1(zhangsan);Console.Read();static void method1(string message)Console.WriteLine(nihao+me
12、ssage);static void method2(string message)Console.Write(hello+message);第15页,共20页,编辑于2022年,星期一多播委托只调用一个委托就可以完成对多个方法的调用,并且传递给委托的参只调用一个委托就可以完成对多个方法的调用,并且传递给委托的参数会传递到委托所包含的每一个方法。数会传递到委托所包含的每一个方法。委托对象支持使用操作符委托对象支持使用操作符“+”来连接。委托的来连接。委托的“+”并非计算两个方法并非计算两个方法的和,而是把方法加入执行队列。的和,而是把方法加入执行队列。第16页,共20页,编辑于2022年,星期
13、一事件事件对象和对象之间是通过传递消息来进行交互的,事件是对象发送的消息。消对象和对象之间是通过传递消息来进行交互的,事件是对象发送的消息。消息可能是鼠标或键盘等引起的,也可能是用户定义的。息可能是鼠标或键盘等引起的,也可能是用户定义的。在在C#中,事件是一种委托,实质是通过委托来执行事件处理代码,事件是中,事件是一种委托,实质是通过委托来执行事件处理代码,事件是外部对象引起的,如鼠标的单击操作就触发外部对象引起的,如鼠标的单击操作就触发Click事件。事件。注册事件采用注册事件采用“+=”操作符,撤销事件采用操作符,撤销事件采用“-=”操作符。操作符。例子例子第17页,共20页,编辑于202
14、2年,星期一小结构造函数属性方法(参数传递,重载)委托接口第18页,共20页,编辑于2022年,星期一实验四 面向对象高级应用(综合)实验目的:实验目的:(1)加深理解面向对象编程的概念。)加深理解面向对象编程的概念。(2)掌握类的多态及继承)掌握类的多态及继承(3)能够综合面向对象的知识进行相关内容的设计)能够综合面向对象的知识进行相关内容的设计 实验内容:实验内容:1、把学校的人员结构抽象成、把学校的人员结构抽象成University类,要求此类中包含方法、事件、属性类,要求此类中包含方法、事件、属性等。用代码实现抽象(只需要定义)其中,包括学生和教师成员,抽象出等。用代码实现抽象(只需要
15、定义)其中,包括学生和教师成员,抽象出Student类和类和Teacher类,类,Teacher类里包含了授课方法,类里包含了授课方法,Student类里包含学习方法,类里包含学习方法,学生学生m_students和教师和教师m_teachers是两种独立的对象,可用是两种独立的对象,可用property语句声明语句声明属性。事件包括开学和放假。可参考以下事件名称:属性。事件包括开学和放假。可参考以下事件名称:开学事件开学事件TermBeginsEvent放假事件放假事件TermEndsEvent定义事件的语法为定义事件的语法为“public event事件名事件名 as 委托名委托名”,如,
16、如“public event TermBeginsEvent as EventHandler”表示开学事件的定义)。表示开学事件的定义)。第19页,共20页,编辑于2022年,星期一实验四 面向对象高级应用(综合)实验目的:实验目的:(1)加深理解面向对象编程的概念。)加深理解面向对象编程的概念。(2)掌握类的多态及继承)掌握类的多态及继承(3)能够综合面向对象的知识进行相关内容的设计)能够综合面向对象的知识进行相关内容的设计 实验内容:实验内容:2、对大学类进行改进,将相似的内容抽象成基类。本实验要求将、对大学类进行改进,将相似的内容抽象成基类。本实验要求将Person类作为类作为Stude
17、nt类和类和Teacher类的基类,类的基类,School类作为类作为University类的基类。类的基类。School类包含学生集合、类包含学生集合、教师集合、开学事件、放假事件、开学方法、放假方法,其中有的方法要定义为虚方法。教师集合、开学事件、放假事件、开学方法、放假方法,其中有的方法要定义为虚方法。另外在教师和学生中添加新的属性:年龄、身高、体重。在大学里添加新的独有成员:辅另外在教师和学生中添加新的属性:年龄、身高、体重。在大学里添加新的独有成员:辅导员集合。辅导员导员集合。辅导员Counsellor也有年龄、身高、体重属性,包括课外辅导方法。也有年龄、身高、体重属性,包括课外辅导方法。第20页,共20页,编辑于2022年,星期一