C#中的继承
来源:互联网 发布:限制流量的软件 编辑:程序博客网 时间:2024/04/29 22:02
曾记得从VB开始的时候就听说了“继承”,可是一直不知道在代码中是如何实现的,通过学习C#才了解到它的好处。
1.基类和派生类
估计通过字面的意思就能够大致了解到这两个区别,举个例子。
教师和学生可以抽象出人这个类来,那么人就是所谓的基类,教师和学生就是人的派生类;当然学生又可以分为男和女的话,那么学生又成为了基类,男和女则成为了派生类。
代码中的实现
那么继承又是如何在代码中实现的呢?通过一个简单的例子来说明一下。
class Program { static void Main(string[] args) { student objstudent = new student(); //实例化学生类 undergraduate objundergraduate = new undergraduate(); //实例化毕业生类 objstudent .getinfo (); //调用相应的函数来实现相应的功能 // objstudent .displnfo (); objstudent.displnfo(); objstudent.getmarks (); objundergraduate.chkegbl(); } } public class person //人这个类 { private string name; private uint age; public void getinfo() //得到公共的姓名和年龄 { Console.WriteLine ("请输入您的姓名和年龄"); name = Console.ReadLine(); //age = uint.Parse(Console.ReadLine()); age = uint.Parse(Console.ReadLine()); } public void displnfo() //显示相应的名字和年龄 { Console.WriteLine("尊敬的{0},您的年龄为{1}", name, age); } } public class student:person //学生继承person这个类,关键是: { private string school; private uint eng; private uint math; private uint sci; private uint tol; 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()); tol = eng + math + sci; Console.WriteLine("所得总分为:{0}", tol ); return (tol); } } public class undergraduate:student //二层继承,毕业生又继承学生这个类 { public void chkegbl() //作为合格生的条件 { Console.WriteLine("要上升一级,要求总分不低于150"); //if(this.getmarks()>149) //if(this.getmarks ()>149) if(this.getmarks()>149) Console.WriteLine("合格"); else Console.WriteLine ("不合格"); } }
通过上面这些代码,我们也看到继承其实也是相当的简单,只需要修改一些形式就可以继承父类。
但是有的人就问了,如果我要覆盖基类里面的方法那么怎么办呢?很简单,只需要在定义基类的时候,加上关键字Virtual,并且在派生类中重新的时候添加override,下面再看一个例子。
2.重载
public class parent { public virtual void f() //采用virtual关键字进行覆盖 { Console.WriteLine("这是基类"); } } class child:parent { public override void f() { base.f(); //可以通过base关键字进行访问 Console.WriteLine("这是派生类"); } }
就是通过这两个关键字来重新覆盖基类。
3.密封方法
我们已经知道,使用密封类可以防止对类的继承,C#中提出了密封方法的概念,以防止在方法所在类的派生类中对该方法的重载。
不是类的每个成员方法都可以作为密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。
using System ;class A{public virtual void F( ) { Console.WriteLine("A.F") ; }public virtual void G( ) { Console.WriteLine("A.G") ; }}class B: A{sealed override public void F( ) { Console.WriteLine("B.F") ; }override public void G( ) { Console.WriteLine("B.G") ; }}class C: B{override public void G( ) { Console.WriteLine("C.G") ; }}
类B对基类A中的两个虚方法均进行了重载,其中F方法使用了sealed修饰符,成为了一个密封方法.所以在B的派生类C中,就不能再次重载方法F。
C#继承中应该注意的事项
1.继承时可以传递的,如果C从B中派生,B又从A中派生,那么C则会同时继承了B和A中的成员。
2.构造函数和析构函数不能被继承。
3.如果派生类定义了与继承而来的成员同名的新成员,就可以覆盖掉已继承的成员。
4.派生类只可以从一个类中继承,可以通过接口,实现多重继承。
- C#中的继承
- C#中的继承应用
- C#中的继承
- C#中的继承
- C#中的继承
- C#中的接口继承
- C#中的继承
- C#中的继承
- C#中的继承
- C#中的继承举例
- C#中的继承
- C#中的继承规则
- C#中的继承(一)
- 浅谈C#中的实现继承
- C#中的继承(一)
- C#中的继承(二)
- c#继承中的函数调用
- C#中的继承、隐藏与重写
- Android adb 模拟滑动 按键 点击事件
- ibatis Unable to open connection to "Oracle, Microsoft provider V1.0.5000.0
- node.js和python性能测试(二)
- 正则表达式中需要转义的字符
- shell与运算的一个示例
- C#中的继承
- cmd operation about the environmental variables
- C++ ofstream和ifstream详细用法
- 计算机视觉资源集
- easyui中的分页实现(支持MySQL,SQLServer,Oracle)
- c#天敏sdk2000的视频采集卡简单调用
- Linux的链表结构
- 自定义扩展jquery的ajax方法添加maskLoader
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示