C#类的继承
发布日期:2021-06-30 19:10:30
浏览次数:3
分类:技术文章
本文共 2425 字,大约阅读时间需要 8 分钟。
本节课将介绍C#中的继承,其目的如下: 1.基类的实现 2.类的继承 3.在派生类中初始化基类 4.如何调用基类成员 5.如何覆盖基类成员 继承是面向对象程序设计的主要特征之一,它可以让你重用代码,可以节省程序设计的时间。 1.清单8-1 继承: BaseClass.cs using System; public class ParentClass { public ParentClass() { Console.WriteLine("Parent Constructor."); } public void print() { Console.WriteLine("I'm a Parent Class."); } } public class ChildClass : ParentClass { public ChildClass() { Console.WriteLine("Child Constructor."); } public static void Main() { ChildClass child = new ChildClass(); child.print(); } } Output: Parent Constructor. Child Constructor. I'm a Parent Class. 说明 清单8-1演示了两个类的用法。上面的一个类名为ParentClass, main函数中用到的类名为ChildClass。要做的是创建一个使用父类ParentClass现有代码的子类ChildClass。 1.首先必须说明ParentClass是ChildClass的基类。 这是通过在ChildClass类中作出如下说明来完成的:"public class ChildClass : ParentClass"。在派生类标识符后面,用分号":" 来表明后面的标识符是基类。C#仅支持单一继承。因此,你只能指定一个基类。 2.ChildClass的功能几乎等同于ParentClass。 因此,也可以说ChildClass "就是" ParentClass。在ChildClass 的Main()方法中,调用print() 方法的结果,就验证这一点。该子类并没有自己的print()方法,它使用了ParentClass中的 print()方法。在输出结果中的第三行可以得到验证。 3.基类在派生类初始化之前自动进行初始化。 注意到清单8-1的输出结果。ParentClass 类的构造函数在ChildClass的构造函数之前执行。 2.清单 8-2. 派生类同基类进行通信: BaseTalk.cs using System; public class Parent { string parentString; public Parent() { Console.WriteLine("Parent Constructor."); } public Parent(string myString) { parentString = myString; Console.WriteLine(parentString); } public void print() { Console.WriteLine("I'm a Parent Class."); } } public class Child : Parent { public Child() : base("From Derived") { Console.WriteLine("Child Constructor."); } public void print() { base.print(); Console.WriteLine("I'm a Child Class."); } public static void Main() { Child child = new Child(); child.print(); ((Parent)child).print(); } } Output: From Derived Child Constructor. I'm a Parent Class. I'm a Child Class. I'm a Parent Class. 说明 1.派生类在初始化的过程中可以同基类进行通信。 清单8-2演示了在子类的构造函数定义中是如何实现同基类通信的。分号":"和关键字base用来调用带有相应参数的基类的构造函数。输出结果中,第一行表明:基类的构造函数最先被调用,其实在参数是字符串"From Derived"。 2.有时,对于基类已有定义的方法,打算重新定义自己的实现。 Child类可以自己重新定义print()方法的实现。Child的print()方法覆盖了Parent中的 print 方法。结果是:除非经过特别指明,Parent类中的print方法不会被调用。 3.在Child类的 print() 方法中,我们特别指明:调用的是Parent类中的 print() 方法。 方法名前面为"base",一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 Child类中的print()方法的执行结果出现上面的第三行和第四行。 4.访问基类成员的另外一种方法是:通过显式类型转换。 在Child类的Main()方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。清单8-2的最后一行实际上执行了Parent类中的 print()方法。 小结 你已经了解了如何创建一个派生类及其基类。你可以对基类成员进行初始化,以及如何对方法进行隐式或者显式的调用。你也了解了派生类是其基类的一个特例。转载地址:https://linuxstyle.blog.csdn.net/article/details/1539744 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月14日 22时11分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
《知识图谱》阅读笔记(七)
2019-04-30
《知识图谱》阅读笔记(九)
2019-04-30
【超越白皮书7】你需要知道关于ETH2.0的几个事实
2019-04-30
超越白皮书8:穿云而过的闪电网络
2019-04-30
AMM做市无常损失对冲分析系列(一)—— 损益及期权对冲模型构建
2019-04-30
JS中document对象和window对象有什么区别
2019-04-30
【python练习题】遍历1
2019-04-30
【matlab】显示图片且下方显示文字
2019-04-30
关于greater<int>以及类模板的一些理解
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
基于CentOS 7的Linux常用命令行命令
2019-04-30
行阶梯型矩阵
2019-04-30
临界资源与临界区
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30
图像去噪(包含修正的阿尔法均值滤波及通用滤波方法代码)
2019-04-30
SVM进行人脸检测
2019-04-30
C++学习笔记
2019-04-30