




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,精选,第7章继承和接口,2,精选,内容提要:C#的继承机制派生类的构造与析构多态性继承和接口的用法目的要求:掌握继承和接口的声明及调用重点难点:继承、接口,3,精选,7.1C#的继承机制,继承使面向对象技术能够提高软件开发效率的重要原因之一,其定义是:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。,4,精选,7.1.1继承的基本知识继承(Inheritance)是自动地共享类、派生类和对象中的方法和数据的机制。它允许在既有类的基础上创建新类,新类从既有类中继承类成员,而且可以重新定义或加进新的成员,从而形成类的层次或等级。一般称被继承的类为基类或父类,而继承后产生的类为派生类或子类。,5,精选,类之间的继承关系的存在,对于在实际系统的开发中迅速建立原型,提高系统的可重用性和可扩充性,具有十分重要的意义。派生类的声明格式为:属性类修饰符class类名:基类类体在类声明中,通过在类名的后面加上冒号和基类名表示继承。,6,精选,例:usingSystem;classEmployeepublicstringEmpID;publicstringEmpName;classSales:Employeepublicint销售额;classTeststaticvoidMain()Saless1=newSales();s1.EmpID=001;s1.EmpName=张三;s1.销售额=100;Console.WriteLine(员工一:);Console.WriteLine(代号=0,名称=1,销售额=2,s1.ID,s1.Name,s1.销售额);,运行结果如下:,7,精选,7.1.2base关键字,base关键字用于从派生类中访问基类的成员,它有两种基本用法:指定创建派生类实例时应调用的基类构造函数,用于调用基类的构造函数完成对基类成员的初始化工作;在派生类中访问基类成员。,8,精选,例:usingSystem;classEmployeeprivatedoublebsalary=1000;doublepsalary;publicintn;publicdoubleEsalary()Console.Write(该员工进公司的年数为:);n=int.Parse(Console.ReadLine();psalary=bsalary*(Math.Pow(1+0.15),(n-1);returnpsalary;classDEmp:EmployeenewpublicdoubleEsalary()Console.WriteLine(计算大专生员工的工资);return1.5*base.Esalary();classTeststaticvoidMain()DEmpdz=newDEmp();Console.WriteLine(该员工的实际工资为:0,dz.Esalary();,9,精选,7.1.3覆盖当一个实例方法声明包含一个override限定符时,这个方法就用相同的属性覆盖一个被继承的虚拟方法,则此方法被称为覆盖方法。覆盖方法声明不能包括new,static,virtual或abstract限定符中的任何一个,对于一个覆盖声明,除非下面都是可行的,否则,编译时就会出错:,10,精选,一个被覆盖的基本方法能被定位;被覆盖的基本方法是虚拟的、抽象的方法,既被覆盖的基本方法不能是静态的或非虚拟的;覆盖声明及被覆盖的基本方法具有相同的声明访问性。一个覆盖声明访问被覆盖的基本方法。,11,精选,7.2多态性面向对象的程序设计语言中,多态性是第三种最基本的特征(前两种是封装和继承)。多态性(polymorphism来自希腊语,意思是多种形态)是指允许一个接口访问动作的通用类的性质。7.2.1多态性概述多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。,12,精选,7.2.2虚方法当方法声明中包含virtual修饰符时,方法就被称为虚方法。当没有virtual修饰符时,方法被称为非虚方法,虚方法定义中不能包含static、abstract或override修饰符。非虚方法的执行是不变的,不管方法在从它声明的类的实例中还是在派生类中的实例中被调用,执行都是相同的。相反,虚方法的执行可以被派生类改变,具体实现是在派生类中重新定义此虚方法实现的。重新定义此虚方法时,要求方法名称、返回值类型、参数表中的参数个数、类型顺序都必须与基类中的虚方法完全一致,而且要在方法声明中加上override关键字,不能有new,static或virtual修饰符。,13,精选,7.3接口接口是用来描述组件对外提供的服务,并在组件和组件之间,组件和客户之间定义交互的标准。组件一旦发布,它只能通过预先定义的接口来提供合理的,一致的服务,这种接口定义之间的稳定性使客户应用开发者能够构造出坚固的应用。,14,精选,7.3.1接口的定义1.声明一个接口定义了一个协议。一个实现了某个接口的类或结构必须符合它的协议。一个接口可以从多个基本接口继承,而一个类或结构也可以实现多个接口。接口可以包含方法、属性和索引等(即在接口中只能包含方法而不能包含变量)。接口自己不为它所定义的成员提供具体实现。接口只是指定类中必须被实现的成员。格式:接口修饰符interface接口名:基接口名接口的成员;;,15,精选,接口的继承接口具有不变性,但这并不意味着接口不再发展。类似于类的继承性,接口也可以继承和发展。接口可以从零或多个接口中继承。从多个接口中继承时,用“:”后跟被继承的接口名字。多个接口名之间用“,”分割。被继承的接口应该是可以访问到的,即不能从private或internal类型的接口继承,接口还不允许直接或间接地从自身继承。,16,精选,例:usingSystem;interfaceIControlvoidPaint();interfaceITextBox:IControlvoidSetText(stringtext);interfaceIListBox:IControlvoidSetItems(stringitems);interfaceIComboBox:ITextBox,IListBox对一个接口的继承也就继承了接口的所有成员。上例中,接口ITextBox和IListBox都从接口IControl中继承的,也就继承了接口IControl的Paint方法。IComboBox的基本接口是IControl、ITextBox,和IListBox。即上面的接口IComboBox继承了接口IControl的Paint方法、ITextBox的SetText方法和IListBox的SetItems方法。,17,精选,7.3.2接口的成员1.接口成员的定义接口可以包含一个或多个成员,这些成员可以是方法、属性等,但不能是常量、运算符、构造函数或析构函数,而且不能包含任何静态成员。例:publicinterfaceImyListvoidAdd(strings);intCountget;所有接口成员默认都是公有访问(即隐式地具有public访问权限)。,18,精选,接口属性接口属性用接口属性声明来声明:接口属性修饰符接口属性类型接口属性标识接口属性访问器;接口属性声明的访问器与类属性声明的访问器的用法相同。其中,访问器可以为:get;set;get;set;set;get;即接口的属性可以是只读、只写或可读可写的。,19,精选,3.接口事件接口事件用接口事件声明来声明:接口事件修饰符newevent类型名接口事件标识符;接口事件声明了一个事件。实现接口事件的类可以通过事件与其他类进行交流。,20,精选,接口索引接口索引使用接口索引声明来声明:接口索引修饰符new类型名this参数列表接口访问器;接口索引声明中的属性、类型和形式参数列表与类的索引声明的那些有相同的意义。接口索引声明的访问器与类索引声明的访问器相对应,可为:get;set;get;set;set;get;即接口的索引可以是只读、只写或可读可写的。,21,精选,5.对接口成员的访问接口方法的调用和采用索引指示器访问的规则与类的情况也是相同的,如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员。但是接口是支持多继承的,这样在多继承中如果两个父接口含有同名的成员就会产生二义性。这时就需要进行显式的声明。,22,精选,6.接口成员的完全有效名称使用接口成员也可采用其“完全有效名称”(fullyqualifiedname)。它是这样构成的,接口名加句点“.”,再跟成员名。,23,精选,7.3.3接口的实现接口的声明仅仅给出了抽象方法,相当于程序开发早期的一组协议。具体地实现接口所规定的功能,则需某个类为接口中的抽象方法定义实在的方法体(即语句),称为实现这个接口。1.在类中实现接口接口可以通过类或结构来实现,其实现方法都是类似的。用类来实现接口时,接口的名称必须包含在类声明中的基类列表中。例如:classMyclass:IMyInterface1,IMyInterface2/实现接口中声明的成员,24,精选,实现某个接口的类必须要同时实现该接口的基接口的所有成员。例如:usingSystem;interfaceISequenceobjectAdd();interfaceIRing:ISequenceintInsert(objectobj);classRingSequence:IRingpublicobjectAdd().publicintInsert(objectobj).类RingSequence除了要实现接口IRing中的方法Insert外,还必须同时实现接口IRing基接口ISequence中的方法Add。,25,精选,一个类还可以实现多个接口,例如:usingSystem;interfaceIControlvoidPaint();interfaceIDataBoundvoidBind(intb);publicclassControl:IControlpublicvoidPaint().publicclassEditBox:Control,IControl,IDataBoundpublicvoidPaint().publicvoidBind(intb).上例中,类EditBox从Control类继承,并同时实现了Icontrol和IdataBound接口。EditBox中的Paint方法来自Icontrol,Bind方法来自IdataBound接口。,26,精选,2.显式接口成员执行体在某些情况下,类可能会使用完全有效名称来声明接口成员的实现,以这种方式实现的接口成员称为显式接口成员。例:publicclassEditBox:Icontrol,IComparablevoidIcontrol.Paint()voidIComparable.CompareTo(intb).上面的代码中Icontrol.Paint和Icomparable.CompareTo就是显式接口成员执行体。,27,精选,例:usingSysteminterfaceICloneableobjectClone();interfaceIComparableintCompareTo(objectother);classListEntry:ICloneable,IComparableobjectICloneable.Clone().intIComparable.CompareTo(objectother).上面的代码中Icloneable.Clone和comparable.CompareTo就是显式接口成员执行体。显式接口成员执行体不能使用任何访问修饰符,即不能加public等修饰符。,28,精选,之所以使用显示接口成员执行体,是因为在某些情况下不适合直接使用接口成员的名称。例:usingSystem;interfaceRunnervoidswim();interfaceSwimmervoidswim();classPerson:Runner,SwimmervoidRunner.swim()Console.WriteLine(run);voidSwimmer.swim()Console.WriteLine(swim);classTestInterfacestaticvoidMain()Personp=newPerson();/这时就不能使用p.swim()Runnerr=p;r.swim();Swimmers=p;s.swim();注意:当接口成员使用显示接口成员执行体方式来实现时,只能通过接口实例来访问。,运行结果是:,29,精选,3.接口映射类必须为在基类列表中列出的所有接口的成员提供具体的实现,在类中定位接口成员的实现称之为接口映射。接口通过类实现,那么对于在一个接口中声明的每一个成员都应该对应着类的一个成员。这种对应关系就由接口映射来实现。,30,精选,如果一个类继承了两个或两个以上名称和参数类型都相同的接口成员,那么类中的一个成员就可能实现所有这些接口成员:interfaceIControlvoidPaint();interfaceIFormvoidPaint();classPage:IControl,IFormpublicvoidPaint().这里接口Icontrol和Iform的方法Paint都映射到了类Page中的Paint方法。,31,精选,当然也可以分别用显式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育新体验的探求谈增强现实的实践应用及前景分析
- 郑州财税金融职业学院《当代世界经济学》2023-2024学年第二学期期末试卷
- 教育心理学的奥秘理解记忆与学习
- 介绍大学讲课件
- 济源职业技术学院《人事测评》2023-2024学年第二学期期末试卷
- 2024年广东广州海珠区社区专职工作人员招聘补录22人笔试高频难、易错点备考题库含答案详解
- 互动式新闻故事讲述行业跨境出海项目商业计划书
- 蜂胶软胶囊生产行业跨境出海项目商业计划书
- 魔法学院巫师餐厅行业深度调研及发展项目商业计划书
- 医用高值耗材AI辅助诊断系统行业深度调研及发展项目商业计划书
- 2024北京朝阳区四年级(下)期末英语试题及答案
- 公安外宣工作培训
- 光伏组件清洗合同
- 作风建设学习教育心得体会:在深入学习中校准思想坐标持续转变工作作风(3篇)
- 胸腔积液教案
- 非营利组织财务管理制度与流程
- TCAMA 111-2024 养猪舍空气过滤系统配置规范
- 《爱护鸟类》参考课件
- 医疗废物应急处理流程与方案
- 简阳市2024-2025学年数学五下期末统考试题含答案
- 体检中心投诉处理流程
评论
0/150
提交评论