版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务4优化系统数据存储C#程序设计在进行应用程序的设计与开发时,要求应用系统能够操作简单、程序代码具有较好的可重用性、可扩展性与可维护性。本任务要学习利用类的继承、多态和接口等特性来优化之前已完成的智慧寝室管理平台中的基础信息类。任务描述类的继承类的多态接口相关知识类的继承010203基类和派生类基类成员的隐藏访问基类成员类的继承继承是面向对象程序设计的一个重要特征,它允许在已有类的基础上创建新类,新类从已有类中继承类成员,而且可以重新定义或增加新的成员,从而形成类的层次或等级。.NETFramework类库就是一个庞大的分层类结构体系。其中Object类是一个最上层的基类,其他所有类都是直接或间接由Object类派生而来的。基类和派生类通常把被继承的类称为基类或父类,而把继承后产生的类称为派生类或子类。C#中的继承使用语法如下:
例:classA{
类体A;}classB:A{
类体B;}访问修饰符class派生类名:基类名{
类体}基类和派生类C#中的继承符合下列原则:
继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。在C#中,Object类是所有类的基类。派生类应当是对基类的扩展。派生类可以添加新的成员,但不能去除已继承的成员的定义。构造函数和析构函数不能被继承。除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问权限只能决定派生类能否访问它们。派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。基类可以定义虚方法、虚属性以及虚索引指示器,这样它的派生类能够重写这些成员,实现类的多态性。C#中,派生类只能有一个基类,如需实现多重继承,可以通过接口来完成。基类和派生类【例】使用类的继承。基类成员的隐藏通常,派生类继承了基类中的除构造函数和析构函数外的所有成员。此时,若基类中定义了某一种方法、字段和属性,则可使用new关键字在派生类中创建这些同名方法、字段和属性的全新定义。这样,派生类就形成了对其基类中同名成员的隐藏。例:classA{publicstringf(){//方法体}}classB:A{publicnewstringf(){//方法体}}使用隐藏时,应该把new关键字放置在要隐藏的类成员的数据类型之前访问基类成员1.派生类与基类之间的转换C#允许把派生类转换为基类,但不允许把基类转换为派生类。这样,一个基类的对象既可以指向基类的实例,也可以指向派生的实例。示例语句如下:Animala1=newAnimal(); //创建基类对象实例a1Animala2=newPet(); //基类对象a2指向派生类实例,隐式转换Petp1=(Pet)a2;//把基类对象a2的类型强制转为派生类Pet,再赋值给派生类对象pPetp2=(Pet)a1;//错误需要说明的是:因为基类对象a2指向的是派生类实例,所以可以将a2直接强制转换为子类类型。如果创建实例的时候没有将父类引用到子类对象,是无法实现强制类型转换的。访问基类成员2.派生类中调用基类成员base关键字用于从派生类中访问基类的成员,它有两种基本用法:(1)在定义派生类的构造函数中,指明要调用的基类构造函数,由于基类可能有多个构造函数,根据base后的参数类型和个数,指明要调用某一个基类的构造函数。使用base访问的语法如下:public派生类构造函数名([形参列表]):base(向基类构造函数传递的参数列表){}访问基类成员2.派生类中调用基类成员base关键字用于从派生类中访问基类的成员,它有两种基本用法:(2)在派生类的方法中调用基类中被派生类重写的方法。注意:base关键字只能在实例构造函数、实例方法或实例访问器中使用,不能在静态方法中使用base关键字。base.基类中被重写的方法([参数列表]);访问基类成员【例】文化是一个国家、一个民族的灵魂。中华优秀传统文化是中华民族生生不息、长盛不衰的文化基因,是我们在世界文化激荡中站稳脚跟的坚实根基。在日常生活中,我们可以从小事做起,尊重他人、诚实守信,用实际行动传递着中华民族的优良传统,为构建一个更加和谐、美好的社会贡献自己的力量。
编写学生类与大学生类,体现继承特性。访问基类成员类的继承类的多态接口相关知识类的多态010203成员的虚拟与重写抽象类密封类与密封方法多态是面向对象编程思想的核心之一。它通过基类的引用,依靠执行多个派生类的方法,使程序执行实现动态操作,即在程序运行时,当同一个操作作用于不同的类的实例时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法,最后产生不同的执行结果。使用多态,能够实现程序通用性,提高代码的可扩展性。在C#中,多态是通过在派生类中重写基类的虚方法或抽象类的抽象方法来实现的。类的多态在C#中,多态性的实现,可采用以下步骤:首先在基类中用关键字virtual声明类的成员(这种成员称为虚拟成员),然后在派生类中用关键字override重写虚拟成员。成员的虚拟与重写(1)在基类中声明虚方法(属性)的格式如下:publicvirtual返回值类型方法名称|属性名称([参数列表]){ //方法体语句或属性体
}
(2)在派生类中重写虚方法(属性)的格式如下:publicoverride返回值类型方法名称|属性名称([参数列表]){ //方法体语句或属性体
}例:publicclassAnimal{
//动物基类//……其他代码publicvirtualstringEat(){ //基类的虚方法Console.WriteLine("动物{0}:我要吃东西!",name);}}publicclassPet:Animal{ //宠物派生类//……其他代码publicoverridestringEat(){ //派生类重写基类的虚方法Console.WriteLine("猫咪{0}:我最爱吃鱼!",name);}}【例】虚拟与重写方法。成员的虚拟与重写声明基类时,只给出派生类的一般化形式,而后让派生类去实现具体内容。这种类只定义了方法的框架,而没有提供这些方法的具体实现。这种类称之为抽象类,其用途是提供多个派生类可共享的基类的公共定义。对于抽象类的使用,有以下规定:抽象类只可以作为其他类的基类,它不能直接被实例化,而且抽象类不能使用new操作符。如果抽象类中含有抽象的变量或值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。一个类只要包含抽象方法,该类就必须定义成为一个抽象类。抽象类可以包含抽象成员。抽象类不能被密封。抽象类抽象类使用abstract关键字作为修饰符。抽象类也可以定义抽象方法,方法是将关键字abstract添加到方法的返回类型的前面。一般形式如下:抽象类publicabstractclass:抽象类名{ [访问修饰符]abstract返回值类型方法名([参数列表]);}注意:抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。当从抽象类派生非抽象类时,派生类必须实现所有抽象方法。【例】抽象类的简单示例。抽象类C#中,可以定义密封类。密封类不能再有派生类,因此密封类总是位于类的继承层次树的叶结点,如.NETframwork类库中的String类就是密封类。密封类使用关键字sealed修饰。密封类与密封方法例:publicsealedclassCircle:Shape{ //密封类体语句
}publicmyCircle:Circle//错误:不能从密封类中继承{ //类体语句
}在类的方法成员定义时采用了关键字sealed修饰的方法称作密封方法,特点是:密封方法所在的类并非必须为密封类,而且其派生类中仍可以使用new修饰符来隐藏该方法。密封方法不允许在派生类中被重写。类的继承类的多态接口相关知识接口0102接口的声明与实现显示接口成员实现接口声明是一种类型声明。与抽象类相似,接口并不提供实现,它只表示一种约定。实现接口的类必须遵守该接口定义的约定。一个接口可以从多个基接口继承,而一个类可以实现多个接口。接口的声明方法如下:接口的声明与实现[接口修饰符]interface接口名[:基接口]{
接口体;}接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。接口与抽象类一样都不能用来实例化,仅用于被继承。但两者有着很大的不同:抽象类的成员可以使用修饰符使其具有访问级别,而接口的成员全是public级的。抽象类可以包含字段,而接口不可以。抽象类可以继承接口,而接口不能继承抽象类。抽象类的成员可以具有具体实现,而接口不行。接口的声明与实现【例】继承多个接口的类的示例。接口的声明与实现接口的声明与实现当类在实现接口的多重继承时,可能会出现在两个接口中包含同名成员的情况。此时,若在该类上实现此成员会导致这两个接口均将此成员用作其实现,即通过这两个接口都将调用相同的实现。显示接口成员实现例如,在下列代码中,所有对Paint方法的调用都将是调用同一方法。publicinterfaceIControl{voidPaint();}publicinterfaceISurface{voidPaint();}publicclassSampleClass:IControl,ISurface{
//ISurface.Paint与IControl.Paint都将用该方法publicvoidPaint(){Console.WriteLine("这是SampleClass类中的Paint方法");}}显示接口成员实现若要调用不同的实现,根据所使用的接口,可以显式实现接口成员。显式接口实现是一个类成员,只通过指定接口进行调用。通过在类成员前面加上接口名称和句点可命名该类成员。例如:publicclassSampleClass:IControl,ISurface{voidIControl.Paint(){System.Console.WriteLine("这是IControl.Paint方法");}voidISurface.Paint(){System.Console.WriteLine("这是ISurface.Paint方法");}}调用语句如下:SampleClasssample=newSampleClass();IControlcontrol=sample;ISurfacesurface=sample;control.Paint();//调用IControl.Paint方法surface.Paint();//调用ISurface.Paint方法sample.Paint();//通过SampleClass类对象sample调用Paint方法,编译出错显式接口成员实现的访问修饰符隐含为public,不能够显示声明,也不能使用abstract、virtual、override或static修饰符。【例】优化“智慧寝室管理平台”中信息类的层次结构,设计抽象类Person,并派生出学生类(Student类)用以存储学生的相关信息。任
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026糖尿病护理进修生带教课件
- 吉林省长春市德惠市2026届九年级下学期一模考试道德与法治试卷(含答案)
- 广东省广州市越秀区执信中学2025-2026学年度第二学期初三级英语科3月阶段调研(含答案)
- 胃镜检查患者的知情同意教育
- 二年级语文教学计划与课程安排
- 2026年山东春考语文《语言知识与运用》练习100题及答案解析
- 胃病的康复护理
- 福州软件职业技术学院《中学生认知与学习》2025-2026学年期末试卷
- 黄山职业技术学院《心理统计与spss》2025-2026学年期末试卷
- 厦门大学嘉庚学院《电力电子技术》2025-2026学年期末试卷
- 铅锌价格历年分析报告
- 《中药量效关系》课件
- 直流电阻试验
- 肺康复护理课件
- 传染病的传播途径和预防控制
- Java程序设计项目式教程 课件 7-1 使用List集合存储学生信息
- 《电路与电子技术》课件 5 基本放大电路
- LNG船用燃料罐的CCS工厂认可与产品检验教学教材
- VDA6.5产品审核报告
- 刘园子副井井筒施工组织设计4.24(定稿)(2)剖析
- 中医医疗技术相关性感染预防与控制培训
评论
0/150
提交评论