第5章-面向对象高级程序设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.2.1 类的继承性 3.密封类 为了阻止一个类的代码被其他类继承,可以使用密封类,因为在.NET中,加载密封类时将对密封类的方法调用进行优化,因此使用密封类可以提高应用程序的可靠性和性能。另外,软件开发者通过使用密封类还可以把自己的知识产权保护起来,避免他人共享代码。 在C#中,添加关键字sealed可以声明密封类。 5.2.2 类的多态性 多态性是面向对象程序设计的一个重要特征,多态的意思是一种事物有多种形态。 当派生类从基类继承时,它会获得基类的所有方法、字段、属性和事件。派生类允许扩展基类的成员,也可以重写基类的方法成员,以更改基类的数据和行为。为了使用派生类能更改基类的数据和行为,C#提供了两种选择:一是使用新的派生成员替换基成员,二是重写虚拟的基成员。 在C#中,基类对象可以引用派生类对象,但不允许派生类对象引用基类对象,这样,一个基类对象名称既可以指向基类对象,也可以指向派生对象。而当基类对象执行一个基类与派生类都具有的同名方法调用时,程序可以根据基类对象的类型不同(基类还是派生类)进行正确的调用。 5.2.2 类的多态性 1.使用new关键字重新定义类的成员 使用new关键字来定义与基类中同名的成员,即可替换基类的成员。如果基类定义了一个方法、字段或属性,则new关键字用于在派生类中创建该方法、字段或属性的新定义。new关键字应放置在要替换的类成员的返回类型之前。 2.用virtual和override关键字定义类成员 基类中的声明格式: public virtual 方法名称([参数列表]){ } 派生类的声明格式: public override方法名称([参数列表]){ } 其中,基类与派生类中的方法名称与参数列表必须完全一致。 5.2.2 类的多态性 【实例5-4】虚方法演示。 5.2.2 类的多态性 当点击“创建子类对象并调用方法”按钮时,以子类对象做为实参,将调用子类的Eat方法,显示结果会不同 5.2.2 类的多态性 使用virtual和override时要注意以下几点: (1) 字段不能是虚拟的,只有方法、属性、事件和索引器才可以是虚拟的; (2) 使用virtual修饰符后,不允许再使用static、abstract或override修饰符; (3) 派生类对象即使被强制转换为基类对象,所引用的仍然是派生类的成员; (4) 派生类可以通过密封来停止虚拟继承,此时派生类的成员使用sealed override声明。 5.2.2 类的多态性 3.调用基类方法 当派生类重载或覆盖基类方法后,如果想调用基类的同名方法,可以使用base关键字。如,在Dog类的Eat方法中,希望使用基类的Eat方法,可以用如下方法: public override void Eat() { base.Eat(); } 5.3 抽象类与接口 5.3.1 抽象类 5.3.2 接口 5.3.3 抽象类与接口的比较 返回 5.3.1 抽象类 抽象方法是指在基类的定义中,不包含任何实现代码的方法,实际上就是一个不具有任何具体功能的方法。这样的方法唯一的作用就是让派生类重写。 而只要在类中包含一个抽象方法,该类即为抽象类。在抽象类中,也可以声明非抽象方法。 1.抽象类与抽象方法的声明 在C#中,抽象类和抽象方法使用关键字abstract声明,一般形式如下: public abstract class 抽象类名 { [访问修饰符] abstract 返回值类型 方法名([参数列表]) } 5.3.1 抽象类 抽象类中也可以有抽象属性。类的属性成员添加了abstract关键字后,就成了抽象属性。抽象属性不提供属性访问器的实现,它只声明该类支持的属性,而将访问器的实现留给派生类。抽象属性同样可以是只读的、只写的或可读写的属性。一般形式如下: public abstract返回值类型 属性名 { get; set; } 抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含非抽象的成员,甚至还可以包含虚方法。要注意的是,抽象成员必须在抽象类中声明,但抽象类不要求必须包含抽象成员 5.3.1 抽象类 2.重载抽象方法 抽象类中的抽象方法和抽象属性都没有提供实现,当定义抽象类的派生类时,派生类必须重载基类的抽象方法和抽象属性(如果派生类没有进行重载,则派生也必须声明为抽象类,即在类定义前加上abstract。这一点是与虚方法不同的,因为对于基类的虚方法,其派生类可以不重载。重载抽象类的方法和属性必须使用override关键字。重载抽象

文档评论(0)

moon8888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档