




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#
中的高级OOP概念第五章回顾第四章-实现C#中的高级OOP概念带参数的构造函数是指接受参数的构造函数。在
C#中,析构函数由垃圾回收器调用。在C#中允许方法重载在C#中允许操作符重载C#不支持多重继续要重写基类的现有方法,需要在继承类中声明一个同名的新方法,并在方法名称前附加new关键字
2目标讨论多态性使用虚函数讨论抽象基类讨论接口的概念使用接口3C#中的多态性6-1多态性和虚函数关系非常密切多态性允许在运行时实现派生类的方法需要从基类的对象调用派生类方法时,可以使用虚函数publicclassShapeObj
{
publicvirtualvoidarea()
{
System.Console.WriteLine("这是一个虚Area方法");
}
}4C#中的多态性6-25C#中的多态性6-3publicclassCircle:ShapeObj
{publicoverridevoidarea()
{
System.Console.WriteLine("这是Circle的Area()方法");
}
}
publicclassRectangle:ShapeObj
{
publicoverridevoidarea()
{
System.Console.WriteLine("这是Rectangle的Area()方法");
}
}publicclassSquare:ShapeObj
{
publicoverridevoidarea()
{
System.Console.WriteLine("这是Square的Area()方法");
}
}定义了三个类(Rectangle、Circle和Square)。这些类是从ShapeObj类派生的,并且重写了ShapeObj类的area()方法。override关键字用于重写基类函数area()。6C#中的多态性6-4publicclassPolymorphismExp
{
publicstaticvoidmain()
{
ShapeObj[]objArray=newShapeObj[4];
objArray[0]=newShapeObj();
objArray[1]=newRectangle(); objArray[2]=newCircle(); objArray[3]=newSquare();
foreach(ShapeObjiterateArrayinobjArray)
{
iterateArray.area();
}
}
}每个派生自ShapeObj的类的area()方法都被调用
7C#中的多态性6-5classSecondExp{publicintfirstMethod(){return(secondMethod()*thirdMethod());}publicvirtualintsecondMethod(){ return(10);}publicintthirdMethod(){ return(20);}}classDerivedClass:SecondExp{publicoverrideintsecondMethod(){ return(30);}}classTest{Publicstaticvoidmain(){ DerivedClassobjDerived=newDerivedClass(); System.Console.WriteLine(objDerived.firstMethod());}}在DerivedClass中重写基类中的虚函数secondMethod()8C#中的多态性6-6多态性是智能重写多态性-在运行时决定调用哪个方法多态性需要虚函数,而虚函数则需要进行方法重写9抽象基类2-1抽象基类是可以被继承的类不能创建抽象类的对象C#允许在类定义中添加abstract修饰符来创建抽象基类。10抽象基类2-2usingSystem;abstractclassBaseClass{publicabstractvoidabstractFunc();publicvoidnonAbstractFunc(){Console.WriteLine("这是nonAbractFunc()方法!");}}classDerivedClass:BaseClass{publicoverridevoidabstractFunc(){Console.WriteLine("这是abstractFunc()方法!");}}classTest{staticvoidmain(){DerivedClassobjDerived=newDerivedClass();BaseClassobjBase=objDerived;objBase.abstractFunc();objDerived.nonAbstractFunc();}}在派生类DerivedClass中重写抽象基类的抽象方法abstractFunc()11接口4-1接口是纯抽象基类它只能包含抽象方法,而不能包含任何方法实现实现特定接口的类必须实现该接口列出的成员publicinterfaceIFile{intdelFile();voiddisFile();}12接口4-2publicclassMyFile:IFile{publicintdelFile(){ System.Console.WriteLine("DelFile实现!"); return0;}publicvoiddisFile(){ System.Console.WriteLine("DisFile实现!");}}classTest{staticvoidmain(){ MyFileobjMyFile=newMyFile(); objMyFile.disFile(); intretValue=objMyFile.delFile();}}类MyFile继承了接口IFile并实现了接口中定义的方法delFile()和disFile()13接口4-3定义一个类:publicclassBaseforInterface{publicvoidopen(){ System.Console.WriteLine("这是BaseforInterface的open方法");}}14接口4-4publicclassMyFile:BaseforInterface,IFile{publicintdelFile(){ System.Console.WriteLine("DelFile实现!"); return0;}publicvoiddisFile(){ System.Console.WriteLine("DisFile实现!");}}classTest{staticvoidmain(){ MyFileobjMyFile=newMyFile(); objMyFile.disFile(); intretValue=objMyFile.delFile(); objMyFile.open();}}定义一个继承类BaseforInterface和接口Ifile的新类MyFile示例输出如下图:15多接口2-1C#允许多接口实现
定义一个接口,仅包含一个方法publicinterfaceIFileTwo{ voidapplySecondInterface();}16多接口2-2publicclassMyFile:BaseforInterface,IFile,IFileTwo{publicintdelFile(){System.Console.WriteLine("DelFile实现!");return0;publicvoiddisFile(){System.Console.WriteLine("DisFile实现!");}publicvoidapplySecondInterface(){System.Console.WriteLine("ApplySecondInterface实现!");}}classTest{staticvoidmain(){MyFileobjMyFile=newMyFile();objMyFile.disFile();intretValue=objMyFile.delFile();objMyFile.open();objMyFile.applySecondInterface();}}本示例实现多接口继承,与前面代码合并后输出的结果如下:17显式接口当两个接口中具有同名的方法时,可以使用显式接口实现publicinterfaceIFile{intdelFile();voiddisFile();}publicinterfaceIFileTwo{voidapplySecondInterface();voiddisFile();}publicclassMyFile:BaseforInterface,IFile,IFileTwo{...voidIFile.disFile(){System.Console.WriteLine("DisFile的IFile实现");voidIFileTwo.disFile(){System.Console.WriteLine("DisFile的IFileTwo实现");}...}18接口继承可以通过将多个接口组合到一起来创建新的接口interfaceIAllFile:IFile,IFileTwo{//如果需要,除了IF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鹰潭青砂石栏杆施工方案
- 专利入股合同范本
- 卷闸门施工承包合同范例
- 公司小股东合同范本
- 公司投资签约合同范本
- 加工制作手机壳合同范本
- 2025年四川省安全员-B证考试题库及答案
- 公司设备订货合同范本
- 二年级口算题目练习册100道
- 包装物合同范本
- 阿尔兹海默病的家庭护理
- bim技术课件教学课件
- 腹水形成的原因及治疗
- 单晶炉车间安全培训
- 高中地理必修第一册期末试卷及答案-中图版-2024-2025学年
- 护理核心制度测试题+参考答案
- 机械制造技术基础(课程课件完整版)
- 《2023版CSCO卵巢癌诊疗指南》解读课件
- 【医院药品管理系统探析与设计(论文)10000字】
- 螺旋体病梅毒课件
- 2024年咸宁市引进人才44名历年高频难、易错点500题模拟试题附带答案详解
评论
0/150
提交评论