已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C# 中的继承,西源软件培训中心,回顾,类是 C# 中的一种结构,用于在程序中模拟现实生活的对象 成员变量表示对象的特征 方法表示对象可执行的操作 如果类中未定义构造函数,则由运行库提供默认构造函数 析构函数不能重载,并且每个类只能有一个析构函数 可以根据不同数量的参数或不同数据类型参数对方法进行重载,不能根据返回值进行方法重载 命名空间用来界定类所属的范围,类似于Java中的包,目标,理解继承 在C# 中使用继承 在C#中使用接口 在C#中使用方法的重写,继承,Class Base / 成员变量 int basevar; / 成员函数 Base_fun1() / 定义 . .,Class Derived : Base / 成员变量 int derivedvars; / 成员函数 Derived_fun1() / 定义 . .,基类,void main() Derived dr_obj = new Derived() ; dr_obj.Base_fun1(); ,无需重新编写代码,派生类,狗,马,继承,动物,基类,派生类,继承的层次结构示例,Class Animal / 成员变量 int eyes, nose; Animal() eyes = 2; nose = 1; Pet_Animal() / 定义 ,基类,Class Dog : Animal / 成员变量 / 成员函数 private Barking() / 定义 private Wagging_Tail() ,派生类,继承 C# 中的类,public class Graduate: Student, Employee / 成员变量 / 成员函数 ,多重继承,允许多重接口实现,演示,public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; public void GetMarks() Console.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; private 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(); objStudent.DispInfo(); objStudent.GetMarks(); ,调用的基类成员,无法实现 GetInfo() 和 DispInfo() 方法,演示,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.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.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) Console.WriteLine(“合格“); else Console.WriteLine(“不合格“); ,派生类,public static void Main(string args) UnderGraduate objUnderGraduate = new UnderGraduate(); objUnderGraduate.GetInfo(); objUnderGraduate.DispInfo(); objUnderGraduate.ChkEgbl(); ,用于从派生类中访问基类成员 可以使用 base 关键字调用基类的构造函数,关键字 base,调用 base 构造函数,public class Student:Person private uint id; /调用 Person 构造函数 public Student(string name,uint age,uint id):base(name,age) this.id = id; Console.WriteLine(id); ,:base 关键字将调用 Person 类构造函数,演示,public class Person public string _name; public uint _age; public Person(string name, uint age) this._name = 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 = new Student(“XYZ“, 45, 001); ,关键字 override,Class Base / 成员变量 int basevar; / 成员函数 GetInfo() / 定义 . .,Class Derived : Base / 成员变量 int derivedvars; / 成员函数 override GetInfo() / 定义 . .,基类,派生类,base 方法的新实现,关键字 virtual,Access modifier virtual return type name ( parameters-list ) . / Virtual 方法实现 . ,public virtual void Func() Console.WriteLine(“这是 virtual 方法,可以被重写“); ,/将执行派生类的变量,/要求 new 访问修饰符,将输出派生类中的 val,相同字段,new,隐藏继承成员,关键字 new,class Employee public virtual void EmpInfo() Console.WriteLine(“此方法显示职员信息“); ,class DervEmployee: Employee public override void EmpInfo() base.EmpInfo(); Console.WriteLine(“此方法重写 base 方法“); ,static void Main(string args) DervEmployee objDervEmployee = new DervEmployee(); objDervEmployee.EmpInfo(); Employee objEmployee = objDervEmployee; objEmployee.EmpInfo(); ,抽象类和抽象方法,abstract class ClassOne /类实现 ,访问修饰符,派生类的基类,不能实例化,abstract class Base / 成员变量 int basevar; / 成员函数 abstract void base_fun1(parameters); / 无法实现 . ,抽象方法,class Derived : Base / 成员变量 int derivedvars; / 成员函数 override void Base_fun1(parameters) / 实际实现 . ,抽象类,派生类,提供,重写方法,原型,必须重写,抽象类和抽象方法,演示,using System; namespace Example_5 abstract class ABC public abstract void AFunc(); public void BFunc() Console.WriteLine(“这是一个非抽象方法!“); class Derv : ABC public override void AFunc() Console.WriteLine(“这是一个抽象方法! “); ,抽象类 不能实例化,派生类 重写方法,static void Main(string args) Derv objB = new Derv(); objB.AFunc(); objB.BFunc(); ,abstract class MyAbs public abstract void AbMethod(); /派生类 class MyClass : MyAbs public override void AbMethod() Console.WriteLine(“在 MyClass 中实现的抽象方法“); /派生自 MyClass 的子类 class SubMyClass:MyClass public void General() /未实现 AbMethod 抽象方法 Console.WriteLine(“在 SubMyClass 中未实现的抽象方法 “); ,static void Main(string args) SubMyClass objSubClass = new SubMyClass(); objSubClass.General(); ,接口,OFF,ON,请按开关按钮:ON/OFF,两种方法 ON OFF,接口,ISwitch ON() OFF(),接口,class IBase void method1(); int method2(); int method3(float); /没有实现 . ,接口,interface,只有方法声明,没有实现,public interface IPict int DeleteImage(); void DisplayImage(); ,隐式声明为 public,无访问修饰符,示例中的 IPict 接口用于演示接口,接口,演示,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.DeleteImage(); Console.WriteLine(t); ,派生自 IPict 接口,演示:示例 10,public interface IPict int DeleteImage(); void DisplayImage(); public class MyImages : BaseIO, IPict public int DeleteImage() Console.WriteLine(“DeleteImage 实现!“); return(5); public void DisplayImage() Console.WriteLine(“DisplayImage 实现!“); ,public 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(); ,多重接口实现,C# 不允许多重类继承 但 C# 允许多重接口实现 这意味着一个类可以实现多个接口,演示:示例 11,public interface IPictManip void ApplyAlpha(); /第二个接口 public interface IPict int 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(); objM.ApplyAlpha(); ,显式接口实现,在 C# 中,只要不发生命名冲突,就完全可以允许多重接口实现,public interface IPictManip void ApplyAlpha(); ,public interface IPict void ApplyAlpha(); ,public class MyImages : BaseIO, IPict, IPictManip public int ApplyAlpha() . . ,?,使用显式接口实现,演示:示例 12,public class MyImages : BaseIO, IPict, IPictManip public 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 void Main(string args) MyImages objM = new MyImages(); IPict Pict = objM; /IPict 引用 Pict.DisplayImage(); IPictManip PictManip = objM; /IPictManip 引用 PictManip.DisplayImage(); ,演示:示例 13,public 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()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西临汾2025中考通知书
- 2025年年市政工程项目合作计划书
- 市政管网改造规划设计方案
- 市政管网建设现场环保措施方案
- 杀菌剂生产线项目建设工程方案
- Hydroquinone-impurity-1-生命科学试剂-MCE
- 2026-2031年中国一次性使用导尿管行业市场发展趋势与前景展望战略研究报告
- Florpyrauxifen-benzyl-生命科学试剂-MCE
- Estabhan-impurity-58-生命科学试剂-MCE
- 施工人员培训与管理方案
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- 教师培训课件:《班会的设计与实施(小学)》
- 大学生职业生涯发展报告
- 【正版授权】 IEC 60811-203:2012 EN-FR Electric and optical fibre cables - Test methods for non-metallic materials - Part 203: General tests - Measurement of overall dimensions
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 人民群众是历史的创造者
- 中国农业文化遗产与生态智慧智慧树知到期末考试答案章节答案2024年浙江农林大学
- 2024年温州工业与能源集团招聘笔试参考题库附带答案详解
- T-CPIA 0050-2023 T-CSTE 0215-2023 质量分级及“领跑者”评价要求光伏并网逆变器
- 广告学专业大学生职业规划
- GIS组合电器课件
评论
0/150
提交评论