- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用对象思考
第7章 用对象思考 在前一章,学习了.NET中的类和对象,也会用面向对象的思想来编写程序了。在面向对象编程中经常会遇到对象与对象之间消息的传递。其实在现实世界中我们发现对象之间存在更多的关系,如亲人关系、朋友关系等。在OOP中,同样需要对象之间建立关系,实现更多通信。本章将深入OOP编程,深入学习面向对象编程的更多特性。本章主要涉及到的知识点有: 继承:实现代码的复用,建立类的层次关系。 多态:理解多态原理,用抽象类和抽象方法实现多态。 接口:理解接口的定义以及应用。 了解序列化和反序列化,程序集和反射。 了解C#面向对象特性,学会使用索引、委托和事件。 7.1 用对象思考:继承 现实中存在着各种继承关系,比如动物与猫的关系、轿车与车的关系。在面向对象编程中也存在“继承”的概念,C#能够利用继承的强大机制,在面向对象编程中更好的模拟现实世界,实现更复杂的面向对象描述,实现软件中的代码复用。 7.1.1 解决代码的冗余 【本节示例参考:\源代码\chapter7\7.1.1\InheritExample】 在完成一个信息管理系统的时候,笔者把系统的使用者分为两类,一般用户和管理员,他们具有不同的权限。通过类图对比一下这两个类,如图7.1所示。 可以看到,User类和Admin类都具有相同的属性Id和Name,具有相同的方法SayHi。也就是说对于系统的使用者,两个类都具有一些相同的状态和行为。考虑到系统的扩展性,以后系统的使用者角色可能会更多,这会编写大量重复的代码,造成冗余。为了解决这个问题,下面重新创建一个新类Person,用于保存User类和Admin类公共的属性和方法,如图7.2所示。实现三个类的关系的程序如代码7-1所示。 7.1.2 建立继承模型 【本节示例参考:\源代码\chapter7\ 7.1.2\InheritExample】 在面向对象编程中,什么是继承呢?在现实世界中,继承关系是到处存在的,如用户和管理员都是人,他们都具有人的共同特性;猫和狗都是动物,都具有动物的共同特性。我们把现实中可以通过“is a”描述的关系,称作继承关系。即“管理员是人(Admin is a Person)”,“狗是动物(dog is animal)”。 C#中是如何实现继承的呢?通过“:”运算符。在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。例如下面的定义的类实现了“管理员是人”的关系: public class Person { //Person类成员 } public class Admin : Person { //Admin类成员 } 7.1.3 继承隐私保护 【本节示例参考:\源代码\chapter7\ 7.1.3\InheritExample】 继承可以实现不同范围的隐私保护,通过public、private、protected访问修饰符可以实现。它们的区别如图7.3所示。下面通过提出问题,解决问题的方式学习继承的访问控制。 (1)如果父类中的成员,只允许父类自己所独有,不允许子类和其他类访问,如何实现?将父亲的成员声明为private的,该成员就只能被父类本身访问,如图7.4所示。 (2)如果父类中的成员,只允许父类和其子类访问,不允许其他类访问,如何实现将父亲的成员声明为protected的,该成员就只能被父类和其子类访问,如图7.5和图7.6所示。 7.1.4 继承的特性 继承实现了类与类之间的层次关系,描述了更加丰富多彩的面向对象世界。同时,继承也具有一些特点需要了解。 (1)传递性 在信息管理系统中,用户分为一般用户和管理员,因为后台管理的需要,必须要有一个超级管理员的角色来实现整个系统的管理。这样子,系统的用户关系图如图7.7所示。在程序中的继承关系如图7.8所示。 通过这种传递的关系,SuperAdmin不仅可以共享父类Admin的公共属性和方法,同时可以共享Person类的属性和方法。 (2)单根性 在上一节已经提到了,C#中的继承是单继承的,不支持多继承。 (3)密封性 在C#中可以通过关键字sealed来修饰一个类,这样的类是不能被继承的,这种类称为密封类。 7.1.5 继承的价值 【本节示例参考:\源代码\chapter7\7.1.5\InheritExample】 继承模拟了现实世界中的关系,在OOP中强调一切皆对象,这符合面向对象的编程思想,同时,继承实现了代码的重用,减轻了程序员编写代码的负担。继承使程序的结构更加清晰,使类与类之间的关系层次机构化,更易于维护。合理地使用继承,会对程序编写带来很大帮助。最后,通过一个综合例子来完成对继承的学习。请看下面的描述: 狗是哺乳动物。狗通常的时候和人打招呼会通过‘摇摇尾巴’,在被抚摸感
文档评论(0)