面向对象高级内容.ppt
《面向对象高级内容.ppt》由会员分享,可在线阅读,更多相关《面向对象高级内容.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual C#.Net程序设计程序设计电子科大成都学院计算机系电子科大成都学院计算机系电子科大成都学院计算机系电子科大成都学院计算机系课件制作:罗福强课件制作:罗福强课件制作:罗福强课件制作:罗福强E-MailE-Mail:2023/5/301电子科大成都学院精品课程Visual C#.Net程序设计第四章第四章 面向对象的高级程序设计面向对象的高级程序设计 l l4.1 类的继承性与多态性类的继承性与多态性 l l4.2 抽象类与接口抽象类与接口 l l4.3 分部类与命名空间分部类与命名空间 l l4.4 委托委托 2023/5/302电子科大成都学院精品课程Visual C#.Net
2、程序设计4.1 类的继承性与多态性类的继承性与多态性 l l一、类的继承性一、类的继承性 l l二、类的多态性二、类的多态性 返回返回2023/5/303电子科大成都学院精品课程Visual C#.Net程序设计一、类的继承性一、类的继承性类的继承性最主要的优点就是能提高代码的可重用性类的继承性最主要的优点就是能提高代码的可重用性类的继承性最主要的优点就是能提高代码的可重用性类的继承性最主要的优点就是能提高代码的可重用性 l l1派生派生类的声明的声明l l2派生派生类的构造函数的构造函数l l3密封密封类2023/5/304电子科大成都学院精品课程Visual C#.Net程序设计1派生类的
3、声明l l(1)(1)派生派生派生派生类类的特点的特点的特点的特点可以拥有自己的成员可以拥有自己的成员可以拥有自己的成员可以拥有自己的成员可以隐式地从基类继承所有成员,包括方法、字段、属可以隐式地从基类继承所有成员,包括方法、字段、属可以隐式地从基类继承所有成员,包括方法、字段、属可以隐式地从基类继承所有成员,包括方法、字段、属性和事件,但私有成员、构造函数和析构函数等除外。性和事件,但私有成员、构造函数和析构函数等除外。性和事件,但私有成员、构造函数和析构函数等除外。性和事件,但私有成员、构造函数和析构函数等除外。只能从一个类中继承只能从一个类中继承只能从一个类中继承只能从一个类中继承 l
4、l(2)(2)一般形式一般形式一般形式一般形式2023/5/305电子科大成都学院精品课程Visual C#.Net程序设计派派生生类类的的示示例例2023/5/306电子科大成都学院精品课程Visual C#.Net程序设计2派生派生类的构造函数的构造函数l l在在C#中,派生类不能继承其基类的构造函数,中,派生类不能继承其基类的构造函数,但通过使用但通过使用base关键字,派生类构造函数关键字,派生类构造函数就可以调用基类的构造函数。就可以调用基类的构造函数。l l当创建派生类对象时,系统首先执行基类构当创建派生类对象时,系统首先执行基类构造函数,然后执行派生类的构造函数。造函数,然后执行
5、派生类的构造函数。l l实例例4-1演示演示(源代源代码见教材教材)2023/5/307电子科大成都学院精品课程Visual C#.Net程序设计3密封密封类l l使用密封类可以阻止一个类的代码被其他类继承使用密封类可以阻止一个类的代码被其他类继承使用密封类可以阻止一个类的代码被其他类继承使用密封类可以阻止一个类的代码被其他类继承l l使用密封类的好处:使用密封类的好处:使用密封类的好处:使用密封类的好处:可以提高应用程序的可靠性和性能。可以提高应用程序的可靠性和性能。可以提高应用程序的可靠性和性能。可以提高应用程序的可靠性和性能。软件企业通过使用密封类还可以把自己的知识产权保护软件企业通过使
6、用密封类还可以把自己的知识产权保护软件企业通过使用密封类还可以把自己的知识产权保护软件企业通过使用密封类还可以把自己的知识产权保护起来,避免他人共享代码。起来,避免他人共享代码。起来,避免他人共享代码。起来,避免他人共享代码。l l在在在在C#C#中,添加关键字中,添加关键字中,添加关键字中,添加关键字sealedsealed可以声明密封类。可以声明密封类。可以声明密封类。可以声明密封类。2023/5/308电子科大成都学院精品课程Visual C#.Net程序设计二、类的多态性二、类的多态性l l为了使用派生类能更改基类的数据和行为,为了使用派生类能更改基类的数据和行为,为了使用派生类能更改
7、基类的数据和行为,为了使用派生类能更改基类的数据和行为,C#C#提提提提供了两种选择:供了两种选择:供了两种选择:供了两种选择:l l1 1使用使用使用使用newnew关关关关键键字重新定字重新定字重新定字重新定义类义类的成的成的成的成员员l l2.2.用用用用virtualvirtual和和和和overrideoverride关键字定义类成员关键字定义类成员关键字定义类成员关键字定义类成员 2023/5/309电子科大成都学院精品课程Visual C#.Net程序设计1使用使用new关关键字重新定字重新定义类的成的成员l l使用使用使用使用newnew关键字来定义与基类中同名的成员,即可替换
8、关键字来定义与基类中同名的成员,即可替换关键字来定义与基类中同名的成员,即可替换关键字来定义与基类中同名的成员,即可替换基类的成员。基类的成员。基类的成员。基类的成员。l l如果基类定义了一个方法、字段或属性,则如果基类定义了一个方法、字段或属性,则如果基类定义了一个方法、字段或属性,则如果基类定义了一个方法、字段或属性,则 new new 关键关键关键关键字用于在派生类中创建该方法、字段或属性的新定义。字用于在派生类中创建该方法、字段或属性的新定义。字用于在派生类中创建该方法、字段或属性的新定义。字用于在派生类中创建该方法、字段或属性的新定义。l lnew new 关键字放置在要替换的类成员
9、的返回类型之前。关键字放置在要替换的类成员的返回类型之前。关键字放置在要替换的类成员的返回类型之前。关键字放置在要替换的类成员的返回类型之前。l l例如,例如,例如,例如,设设基基基基类类PersonPerson拥拥有有有有AnswerAnswer方法,方法,方法,方法,则则派生派生派生派生类类StudentStudent重新定重新定重新定重新定义义AnswerAnswer的格式如下:的格式如下:的格式如下:的格式如下:public new string Answer()public new string Answer()/代代代代码码行行行行 注,完整代注,完整代注,完整代注,完整代码请码请
10、参参参参见见教材教材教材教材2023/5/3010电子科大成都学院精品课程Visual C#.Net程序设计2.用用virtual和和override关键字定义类成员关键字定义类成员l l“使用使用使用使用newnew声明类的成员声明类的成员声明类的成员声明类的成员”的缺陷是仍然可以通过强制类型的缺陷是仍然可以通过强制类型的缺陷是仍然可以通过强制类型的缺陷是仍然可以通过强制类型转换来继续访问基类的成员。转换来继续访问基类的成员。转换来继续访问基类的成员。转换来继续访问基类的成员。l l为了使派生类的实例完全替换来自基类的成员,在为了使派生类的实例完全替换来自基类的成员,在为了使派生类的实例完全
11、替换来自基类的成员,在为了使派生类的实例完全替换来自基类的成员,在C#C#中,中,中,中,首先在基类中用首先在基类中用首先在基类中用首先在基类中用virtual virtual 关键字标识虚拟成员,然后在派生关键字标识虚拟成员,然后在派生关键字标识虚拟成员,然后在派生关键字标识虚拟成员,然后在派生类中用类中用类中用类中用 override override 关键将基类的虚拟成员覆盖掉。关键将基类的虚拟成员覆盖掉。关键将基类的虚拟成员覆盖掉。关键将基类的虚拟成员覆盖掉。l l例如,基例如,基例如,基例如,基类类PersonPerson及其派生及其派生及其派生及其派生类类StudentStuden
12、t的的的的AnswerAnswer方法方法方法方法书书写写写写格式如下:格式如下:格式如下:格式如下:注,完整代码请参见教材注,完整代码请参见教材注,完整代码请参见教材注,完整代码请参见教材2023/5/3011电子科大成都学院精品课程Visual C#.Net程序设计特特别别注意注意l l使用使用使用使用virtualvirtual和和和和overrideoverride时要注意以下几点:时要注意以下几点:时要注意以下几点:时要注意以下几点:(1 1)字段不能是虚拟的,只有方法、属性、事件和索)字段不能是虚拟的,只有方法、属性、事件和索)字段不能是虚拟的,只有方法、属性、事件和索)字段不能是
13、虚拟的,只有方法、属性、事件和索引器才可以是虚拟的;引器才可以是虚拟的;引器才可以是虚拟的;引器才可以是虚拟的;(2 2)使用)使用)使用)使用virtualvirtual修饰符后,不允许再使用修饰符后,不允许再使用修饰符后,不允许再使用修饰符后,不允许再使用staticstatic、abstractabstract或或或或overrideoverride修饰符;修饰符;修饰符;修饰符;(3 3)派生类对象即使被强制转换为基类对象,所引用)派生类对象即使被强制转换为基类对象,所引用)派生类对象即使被强制转换为基类对象,所引用)派生类对象即使被强制转换为基类对象,所引用的仍然是派生类的成员;的仍
14、然是派生类的成员;的仍然是派生类的成员;的仍然是派生类的成员;(4 4)派生类可以通过密封来停止虚拟继承,此时派生)派生类可以通过密封来停止虚拟继承,此时派生)派生类可以通过密封来停止虚拟继承,此时派生)派生类可以通过密封来停止虚拟继承,此时派生类的成员使用类的成员使用类的成员使用类的成员使用sealed overridesealed override声明。声明。声明。声明。l l实实例例例例4-24-2演示(源代演示(源代演示(源代演示(源代码见码见教材)教材)教材)教材)返回返回2023/5/3012电子科大成都学院精品课程Visual C#.Net程序设计4.2 抽象类与接口抽象类与接口
15、l l一、抽象类一、抽象类 l l二、接口二、接口 l l三、抽象类与接口的比较三、抽象类与接口的比较 返回返回2023/5/3013电子科大成都学院精品课程Visual C#.Net程序设计一、抽象类一、抽象类l l1.抽象类的声明抽象类的声明 l l2.抽象属性抽象属性l l3.抽象方法抽象方法 2023/5/3014电子科大成都学院精品课程Visual C#.Net程序设计1.抽象类的声明抽象类的声明l l在在在在C#C#中,抽象类使用关键字中,抽象类使用关键字中,抽象类使用关键字中,抽象类使用关键字abstractabstract声明声明声明声明.l l一般形式如下:一般形式如下:一般
16、形式如下:一般形式如下:public abstract class public abstract class 抽象抽象抽象抽象类类名名名名 /类类的成的成的成的成员员 l l抽象类的特点:抽象类的特点:抽象类的特点:抽象类的特点:抽象类是用来作为基类的,不能直接实例化,而且只能使用抽象类是用来作为基类的,不能直接实例化,而且只能使用抽象类是用来作为基类的,不能直接实例化,而且只能使用抽象类是用来作为基类的,不能直接实例化,而且只能使用abstractabstract关键字来标识。抽象类的用途是提供多个派生类可共享的关键字来标识。抽象类的用途是提供多个派生类可共享的关键字来标识。抽象类的用途是
17、提供多个派生类可共享的关键字来标识。抽象类的用途是提供多个派生类可共享的基类的公共定义。基类的公共定义。基类的公共定义。基类的公共定义。抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含非抽象的成员,甚至还可以包含虚方法。非抽象的成员,甚至还可以包含虚方法。非抽象的成员,甚至还可以包含虚方法。非抽象的成员,甚至还可以包含虚方法。2023/5/3015电子科大成都学院精品课程Visual C#.Net程序设计2.抽象
18、属性抽象属性l l抽象属性的特点抽象属性的特点抽象属性的特点抽象属性的特点抽象属性声明不提供属性访问器的实现,它只声明该类抽象属性声明不提供属性访问器的实现,它只声明该类抽象属性声明不提供属性访问器的实现,它只声明该类抽象属性声明不提供属性访问器的实现,它只声明该类支持的属性,而将访问器的实现留给派生类。支持的属性,而将访问器的实现留给派生类。支持的属性,而将访问器的实现留给派生类。支持的属性,而将访问器的实现留给派生类。抽象属性同样可以是只读的、只写的或可读写的属性。抽象属性同样可以是只读的、只写的或可读写的属性。抽象属性同样可以是只读的、只写的或可读写的属性。抽象属性同样可以是只读的、只写
19、的或可读写的属性。当派生类从抽象类中继承一个抽象属性时,派生类必须当派生类从抽象类中继承一个抽象属性时,派生类必须当派生类从抽象类中继承一个抽象属性时,派生类必须当派生类从抽象类中继承一个抽象属性时,派生类必须重载该抽象属性。重载该抽象属性。重载该抽象属性。重载该抽象属性。l l抽象属性使用抽象属性使用抽象属性使用抽象属性使用abstractabstract关关关关键键字来字来字来字来标识标识 l l实例实例4-3演示(源代码参写教材)演示(源代码参写教材)2023/5/3016电子科大成都学院精品课程Visual C#.Net程序设计3.抽象方法抽象方法l l抽象方法的特点:抽象方法的特点:
20、抽象方法的特点:抽象方法的特点:抽象方法声明不提供方法的实现,它必须是一个空方法,抽象方法声明不提供方法的实现,它必须是一个空方法,抽象方法声明不提供方法的实现,它必须是一个空方法,抽象方法声明不提供方法的实现,它必须是一个空方法,而将方法实现留给派生类。而将方法实现留给派生类。而将方法实现留给派生类。而将方法实现留给派生类。当派生类从抽象类中继承一个抽象方法时,派生类必须当派生类从抽象类中继承一个抽象方法时,派生类必须当派生类从抽象类中继承一个抽象方法时,派生类必须当派生类从抽象类中继承一个抽象方法时,派生类必须重载该抽象方法。重载该抽象方法。重载该抽象方法。重载该抽象方法。由于抽象方法没有
21、实现,因此,抽象方法不包含常规的由于抽象方法没有实现,因此,抽象方法不包含常规的由于抽象方法没有实现,因此,抽象方法不包含常规的由于抽象方法没有实现,因此,抽象方法不包含常规的方法体,以分号结尾。方法体,以分号结尾。方法体,以分号结尾。方法体,以分号结尾。l l抽象方法使用抽象方法使用抽象方法使用抽象方法使用abstractabstract关关关关键键字来字来字来字来标识标识,格式如下:,格式如下:,格式如下:,格式如下:访问访问修修修修饰饰符符符符 abstract abstract 返回返回返回返回值类值类型型型型 方法名(方法名(方法名(方法名(参数列表参数列表参数列表参数列表);其中,
22、访问修饰符不能是其中,访问修饰符不能是其中,访问修饰符不能是其中,访问修饰符不能是privateprivate,参数列表可省略。,参数列表可省略。,参数列表可省略。,参数列表可省略。l l注意,抽象成员必须在抽象类中声明,但抽象类不要求必注意,抽象成员必须在抽象类中声明,但抽象类不要求必注意,抽象成员必须在抽象类中声明,但抽象类不要求必注意,抽象成员必须在抽象类中声明,但抽象类不要求必须包含抽象成员。须包含抽象成员。须包含抽象成员。须包含抽象成员。2023/5/3017电子科大成都学院精品课程Visual C#.Net程序设计抽象方法示例抽象方法示例(完整代码请参见教材(完整代码请参见教材(完
23、整代码请参见教材(完整代码请参见教材l lpublic abstract class Person public abstract class Person /这这是一个抽象是一个抽象是一个抽象是一个抽象类类l l l l l l /声明抽象方法成声明抽象方法成声明抽象方法成声明抽象方法成员员,注意抽象方法无方法体,注意抽象方法无方法体,注意抽象方法无方法体,注意抽象方法无方法体l l public abstract string Answer();public abstract string Answer();l l l lpublic class Student:Person public
24、 class Student:Person l l l l /重重重重载载基基基基类类的抽象方法的抽象方法的抽象方法的抽象方法l l public override string Answer()public override string Answer()l l l l /代代代代码码行行行行l l l l 2023/5/3018电子科大成都学院精品课程Visual C#.Net程序设计二、接口二、接口 l l1.接口的声明接口的声明 l l2.接口的实现接口的实现 l l3.继承多个接口继承多个接口 2023/5/3019电子科大成都学院精品课程Visual C#.Net程序设计1.接口的
25、声明接口的声明l l说明:说明:说明:说明:默认访问修饰符为默认访问修饰符为默认访问修饰符为默认访问修饰符为publicpublic,还可以是,还可以是,还可以是,还可以是protectedprotected、internalinternal和和和和privateprivate;为了区别类,接口名的命名时建议使用大写字母为了区别类,接口名的命名时建议使用大写字母为了区别类,接口名的命名时建议使用大写字母为了区别类,接口名的命名时建议使用大写字母I I打头;打头;打头;打头;基接口列表可省略,表示接口也具有继承性,从多个基口继承,基基接口列表可省略,表示接口也具有继承性,从多个基口继承,基基接口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 高级 内容
限制150内