- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#程序设计案例教程 第10章 多态 第10章 多态 学习目标 了解多态性。 掌握使用虚方法实现多态。 掌握使用抽象类实现多态。 掌握使用接口实现多态。 第10章 多态 10.1多态性 在面向对象程序设计中,从广义上看,可以将多态分成两种:静态多态性和 动态多态性。 静态多态性是指一个对象同时以不同的物理形式存在。像前面讲的方法重载就属于静态多态,这种多态在编译时,系统就能确定类的对应方法被调用。所以,静态多态性又称先期联编多态性。 动态多态性是指对象根据环境变化来改变它的形式。这种多态只有在程序运行时,系统才能确定类的对应方法被调用。所以,这种多态又称滞后联编多态性。从实现我态的方法上看,又可分为两种类型:基于继承的多态和基于接口的多态。基于继承的多态是在基类中定义方法并在派生类中重写它们,具体实现时采用的是“虚方法”方式。 本章将重点围绕虚方法、抽象类以及接口三种方法的定义和使用,讲解在C#中如何实现类的多态。 第10章 多态 10.2 使用虚方法实现多态 【课堂案例10-1】学生成绩管理系统除了具有学生基本信息的管理功能外。还具有对相关课程信息的管理功能。例如:学校通常将课程分成必修和选修两种类型,对于必修和选修课,既有共同特征(即:课程编号、课程名以及学时),又有各自特征(如:选修课存在选修人数的多少,必修课存在前导和后续课程的衔接)。现要求在成绩管理系统中,实现接收必修课和选修课的资料并显示的功能。其中,必修课信息包括:课程编号、名称、学时、前导课程和后续课程。选修课信息包括:编号、名称、学时和选修人数。 【案例学习目标】 掌握虚方法的定义 掌握虚方法的使用 【案例知识要点】虚方法的定义和使用 【案例完成步骤】 (1)初步认识虚方法 (2)实现应用程序 第10章 多态 10.2.1 初步认识虚方法 C#可以在派生类中实现对基类某个方法的重新定义,并且要求方法名 和参数都相同,这种特性称为虚方法重载,又称重写方法。 实现虚方法重载要求在定义类时,在基类中对要重载的方法添加virtual 关键字。然后,在派生类中对同名的方法使用override关键字。 基类中声明虚方法的格式如下: public virtual 方法名([参数列表]) {…} 派生类中重载虚方法的格式如下: public override 方法名([参数列表]){…} 第10章 多态 通过对【课堂案例10-1】的分析,我们定义3个类:Course、CompulsoryCourse、ElectiveCourse,其中,Course代表课程类、CompulsoryCourse代表必修课类、ElectiveCourse代表选修课类。无论是必修还是选修课,其实质都是一门课程。因此,定义Course是CompulsoryCourse和ElectiveCourse的派生类。 基类的课程(Course)包括编号、课程名、学时字段,如下表所示 字段 类型 描述 iCourseNumber int 课程编号 sCourseName string 课程名称 ilearnNumber int 学时 第10章 多态 基类的课程(Course)要定义接收课程信息和显示课程信息的方法,如下表所示 方法 功能描述 getCourseInfo() 接收课程信息 displayCourseInfo() 显示课程信息 第10章 多态 必修课CompulsoryCourse除了继承基类的所有成员字段外,还需要添加特有的成员字段;前导课程和后续课程。其次,CompulsoryCourse继承基类虚方法的同时,也需要在已有的功能上再添加接收和显示前导/后继课程的语句。根据虚方法重载的要求,我们要在必修课CompulsoryCourse中采用override关键字重写基类虚方法。 派生类CompulsoryCourse的定义如下: class CompulsoryCourse:Course //派生类CompulsoryCourse的定义 { private string sCourseBefore; //前导课程 private string sCourseLater; //后续课程 public override void getCourseInfo(); //重写基类虚方法getCourseInfo() { base.getCourseInfo(); //调用基类虚方法getCourseInfo()
文档评论(0)