




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C# C# 中的继承西源软件培训中心第1页/共35页回顾 类是 C# 中的一种结构,用于在程序中模拟现实生活的对象 成员变量表示对象的特征 方法表示对象可执行的操作 如果类中未定义构造函数,则由运行库提供默认构造函数 析构函数不能重载,并且每个类只能有一个析构函数 可以根据不同数量的参数或不同数据类型参数对方法进行重载,不能根据返回值进行方法重载 命名空间用来界定类所属的范围,类似于Java中的包第2页/共35页目标 理解继承 在C# 中使用继承 在C#中使用接口 在C#中使用方法的重写第3页/共35页继承Class Base / 成员变量 int basevar; / 成员函数 Base_f
2、un1() / 定义 . .Class Derived : Base / 成员变量 int derivedvars; / 成员函数 Derived_fun1() / 定义 . .基类 void main() Derived dr_obj = new Derived() ; dr_obj.Base_fun1();无需重新编写代码派生类第4页/共35页狗马继承动物基类派生类继承的层次结构示例Class Animal / 成员变量 int eyes, nose; Animal() eyes = 2; nose = 1; Pet_Animal() / 定义 基类Class Dog : Animal /
3、 成员变量 / 成员函数 private Barking() / 定义 private Wagging_Tail() 派生类第5页/共35页继承 C# 中的类 public class Graduate: Student, Employee / 成员变量成员变量 / 成员函数成员函数 多重继承 允许多重接口实现第6页/共35页演示public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; public void GetMarks() C
4、onsole.WriteLine(“请输入学校名称);_school = Console.ReadLine();Console.WriteLine(请分别输入英语、数学和自然科学的分数。); _eng = uint.Parse(Console.ReadLine();_math = uint.Parse(Console.ReadLine();_sci = uint.Parse(Console.ReadLine();Console.WriteLine(“所得总分为:0,_eng+_math+_sci); 派生类public class Person private string _name; pr
5、ivate uint _age; public void GetInfo() Console.WriteLine(请输入您的姓名和年龄); _name = Console.ReadLine(); _age = uint.Parse(Console.ReadLine(); public void DispInfo() Console.WriteLine(尊敬的 0,您的年龄为 1 , _name, _age); 基类static void Main(string args) Student objStudent = new Student(); objStudent.GetInfo(); obj
6、Student.DispInfo(); objStudent.GetMarks();调用的基类成员无法实现 GetInfo() 和 DispInfo() 方法第7页/共35页演示public class Person private string _name; private uint _age; public void GetInfo() Console.WriteLine(请输入您的姓名和年龄); _name = Console.ReadLine(); _age = uint.Parse(Console.ReadLine(); public void DispInfo() Console.
7、WriteLine(尊敬的 0,您的年龄为 1, _name, _age); public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; private uint _tot; public uint GetMarks() Console.WriteLine(“请输入学校名称);_school = Console.ReadLine();Console.WriteLine(请分别输入英语、数学和自然科学的分数。 ); _eng = uint
8、.Parse(Console.ReadLine();_math = uint.Parse(Console.ReadLine();_sci = uint.Parse(Console.ReadLine();_tot = _eng + _math + _sci;Console.WriteLine(所得总分为:0 ,_tot);return _tot; 基类派生类public class UnderGraduate:Student public void ChkEgbl() Console.WriteLine(要上升一级,要求总分不低于 150 );if(this.GetMarks() 149)Con
9、sole.WriteLine(合格);elseConsole.WriteLine(“不合格); 派生类public static void Main(string args) UnderGraduate objUnderGraduate = new UnderGraduate(); objUnderGraduate.GetInfo(); objUnderGraduate.DispInfo(); objUnderGraduate.ChkEgbl();第8页/共35页u用于从派生类中访问基类成员 u可以使用 base 关键字调用基类的构造函数 关键字 base第9页/共35页调用 base 构造函
10、数 public class Student:Personprivate uint id; /调用 Person 构造函数 public Student(string name,uint age,uint id):base(name,age) this.id = id;Console.WriteLine(id); :base 关键字将调用 Person 类构造函数第10页/共35页演示public class Person public string _name; public uint _age; public Person(string name, uint age) this._name
11、 = name;this._age = age;Console.WriteLine(_name);Console.WriteLine(_age); public class Student:Person private uint _id; public Student(string name, uint age, uint id):base(name, age) this._id = id;Console.WriteLine(_id); 还将调用 Base 构造函数static void Main(string args) /构造 Student Student objStudent = ne
12、w Student(XYZ, 45, 001);第11页/共35页关键字 overrideClass Base / 成员变量 int basevar; / 成员函数 GetInfo() / 定义 . .Class Derived : Base / 成员变量成员变量 int derivedvars; / 成员函数成员函数 override GetInfo() / 定义定义 . .基类派生类base 方法的新实现第12页/共35页关键字 virtual Access modifier virtual return type name ( parameters-list ) . / Virtual
13、方法实现 .public virtual void Func()Console.WriteLine(“这是 virtual 方法,可以被重写);第13页/共35页/将执行派生类的变量/要求 new 访问修饰符将输出派生类中的 val相同字段new隐藏继承成员关键字 new第14页/共35页class Employee public virtual void EmpInfo() Console.WriteLine(“此方法显示职员信息); class DervEmployee: Employee public override void EmpInfo() base.EmpInfo();Cons
14、ole.WriteLine(“此方法重写 base 方法); static void Main(string args) DervEmployee objDervEmployee = new DervEmployee(); objDervEmployee.EmpInfo(); Employee objEmployee = objDervEmployee; objEmployee.EmpInfo();第15页/共35页抽象类和抽象方法abstract class ClassOne /类实现访问修饰符派生类的基类不能实例化第16页/共35页abstract class Base / 成员变量成员变
15、量 int basevar; / 成员函数成员函数abstract void base_fun1(parameters); / 无法实现无法实现 .抽象方法抽象方法class Derived : Base / 成员变量成员变量 int derivedvars; / 成员函数成员函数override void Base_fun1(parameters) / 实际实现实际实现 .抽象类派生类提供提供重写方法原型原型必须重写重写 抽象类和抽象方法第17页/共35页演示using System;namespace Example_5abstract class ABCpublic abstract v
16、oid AFunc();public void BFunc()Console.WriteLine(“这是一个非抽象方法!);class Derv : ABCpublic override void AFunc() Console.WriteLine(“这是一个抽象方法! ); 抽象类 不能实例化派生类 重写方法static void Main(string args) Derv objB = new Derv(); objB.AFunc(); objB.BFunc();第18页/共35页abstract class MyAbs public abstract void AbMethod();/
17、派生类class MyClass : MyAbspublic override void AbMethod() Console.WriteLine(“在 MyClass 中实现的抽象方法);/派生自 MyClass 的子类class SubMyClass:MyClasspublic void General() /未实现 AbMethod 抽象方法 Console.WriteLine(在 SubMyClass 中未实现的抽象方法 );static void Main(string args) SubMyClass objSubClass = new SubMyClass(); objSubCl
18、ass.General();第19页/共35页接口OFFON请按开关按钮:ON/OFF两种方法两种方法ONOFF第20页/共35页接口OFFONISwitchON()OFF()第21页/共35页接口 class IBase void method1();int method2();int method3(float);/没有实现没有实现 .接口接口interface只有方法声明没有实现第22页/共35页public interface IPictint DeleteImage();void DisplayImage();隐式声明为 public无访问修饰符示例中的 IPict 接口用于演示接口
19、接口第23页/共35页演示public class MyImages : IPict /第一个方法的实现 public int DeleteImage() Console.WriteLine(“DeleteImage 实现!);return(5); /第二个方法的实现 public void DisplayImage() Console.WriteLine(DisplayImage 实现!); static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); int t = objM.Delet
20、eImage(); Console.WriteLine(t);派生自 IPict 接口第24页/共35页演示:示例 10public interface IPictint DeleteImage();void DisplayImage();public class MyImages : BaseIO, IPict public int DeleteImage() Console.WriteLine(“DeleteImage 实现!); return(5); public void DisplayImage() Console.WriteLine(“DisplayImage 实现!); publ
21、ic class BaseIO public void Open() Console.WriteLine(BaseIO 的 Open 方法); static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); int val = objM.DeleteImage(); Console.WriteLine(val); objM.Open();第25页/共35页多重接口实现 C# 不允许多重类继承 但 C# 允许多重接口实现 这意味着一个类可以实现多个接口 第26页/共35页演示:示例 11publ
22、ic interface IPictManip void ApplyAlpha();/第二个接口public interface IPictint DeleteImage();void DisplayImage();public class BaseIO public void Open() Console.WriteLine(“BaseIO 的 Open 方法); static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); objM.DeleteImage(); objM.Open();
23、 objM.ApplyAlpha();第27页/共35页显式接口实现在 C# 中,只要不发生命名冲突,就完全可以允许多重接口实现public interface IPictManip void ApplyAlpha();public interface IPict void ApplyAlpha();public class MyImages : BaseIO, IPict, IPictManippublic int ApplyAlpha().使用显式接口实现第28页/共35页演示:示例 12public class MyImages : BaseIO, IPict, IPictManip p
24、ublic int DeleteImage() Console.WriteLine(“DeleteImage 实现!);return(5); public void ApplyAlpha() Console.WriteLine(“ApplyAlpha 实现!); void IPict.DisplayImage() Console.WriteLine(“DisplayImage 的 IPict 实现); void IPictManip.DisplayImage() Console.WriteLine(“DisplayImage 的 IPictManip 实现); 显式接口实现static voi
25、d Main(string args)MyImages objM = new MyImages();IPict Pict = objM; /IPict 引用Pict.DisplayImage();IPictManip PictManip = objM; /IPictManip 引用PictManip.DisplayImage();第29页/共35页演示:示例 13public interface IPict int DeleteImage();public interface IPictManip void ApplyAlpha(); void DisplayImage();/继承多重接口public interface IPictAll:IPict, IPictManip void ApplyBeta();public class MyImages:IPictAll public int DeleteImage() Console.WriteLine(“DeleteImage 实现!); return(5); public void ApplyAlpha() Console.WriteLine(“ApplyAlpha 实现!); public void ApplyBeta() C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生命科学实验室细胞冻存技术与专用储存盒租赁合同
- 专属私人直升机停机坪年度租赁服务协议
- 抖音平台内容审核标准制定协议
- 仓储配送一体化海运船舶货物委托运输合同
- 博物馆讲解员与科普教育项目合作协议
- 护理节力原则
- 护理科研小组建设与实施路径
- 床边护理查房
- 肾上腺素临床护理应用与安全管理
- XX公司管理体系解析
- 露天矿山三级安全培训
- 2023水电工程费用构成及概(估)算费用标准
- GB/T 12996-2024电动轮椅车
- 2024年学校临时用工合同范例(二篇)
- 2024年全国高考数学试题及解析答案(新课标Ⅱ卷)
- 工程造价咨询服务投标方案(技术方案)
- 网络传播概论(第5版)课件 第9、10章 网络重塑的文化、网络时代新的社会特征
- 癌症患者生活质量量表EORTC-QLQ-C30
- GB/T 20290-2024家用电动洗碗机性能测试方法
- 一般工商贸(轻工)管理人员安全生产考试题库(含答案)
- 医院培训课件:《PPD试验》
评论
0/150
提交评论