C#中的继承

Posted 在西天取经的路上……

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的继承相关的知识,希望对你有一定的参考价值。

在讲解我们的小例子之前,让我们先对继承有个大概的了解。

        1、含义:当一个类A能够获取另一个类B中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类B称为父类或超类,继承了父类或超类的数据和操作的类A称为子类。

       技术分享

        2、继承的关系

        ·单继承:指任何一个类都只有一个单一的父类,即派生类是由一个且只能是一个基类创建,Visual C#只支持单继承。

        ·多继承:指一个类可以有一个以上的父类。它的静态的数据属性和操作从所有这些父类中继承。

        3、继承的语法格式

       技术分享

        4、下面就让我们看一个子类继承父类的例子。

        首先,定义一个父类。

      

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">public class ParentClass                  //先定义一个类  
  2.     {  
  3.         public ParentClass()  
  4.         {  
  5.             Console.WriteLine("您调用了父类的构造函数!");  
  6.         }  
  7.         public void show()  
  8.         {  
  9.             Console.WriteLine("I‘m a ParentClass!");  
  10.         }  
  11.     }</span>  


        其次,声明父类的子类。

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">public class ChildClass : ParentClass        //说明ParentClass是ChildClass的基类  
  2.     {  
  3.         public ChildClass()  
  4.         {  
  5.             Console.WriteLine("您调用了子类的构造函数!");  
  6.         }  
  7.     }</span>  


        然后,将子类实例化。

       

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">static void Main(string[] args)  
  2.         {  
  3.             ChildClass child = new ChildClass();  //将子类实例化  
  4.             child.show();  
  5.              
  6.         }</span>  


        通过这个简单的小例子,我们可以看出,ChildClass的功能几乎等同于ParentClass,基类在派生类初始化之前自动进行初始化。ParentClass 类的构造函数在ChildClass的构造函数之前执行。

 

这一篇将主要介绍如何用base关键字在派生类中访问基类成员和父类成员的方法和属性。

        一、定义一个类Person:

       

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">public class Person  
  2.     {  
  3.         protected string name;  
  4.         protected string ID;  
  5.         public Person()  
  6.         {  
  7.             name = "zhouzhou";  
  8.             ID = "130552199301152555";  
  9.         }  
  10.   
  11.         public virtual void GetInfo()  
  12.         {  
  13.             Console.WriteLine("姓名:{0}", name);  
  14.             Console.WriteLine("身份证号:{0}", ID);  
  15.         }  
  16.     }</span>  


        二、创建一个子类:

       

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">public class Student : Person     //声明student是person的子类  
  2.     {  
  3.         private string StudentNo = "123456";  
  4.         public Student():base() //用base关键字调用基类的构造函数  
  5.         {  
  6.             Console.WriteLine("我的名字叫周周。");  
  7.         }  
  8.         public override void GetInfo()  
  9.         {  
  10.             base.GetInfo();     //用base关键字调用父类的方法  
  11.             Console.WriteLine("学号:{0}", StudentNo);  
  12.         }  
  13.   
  14.     }</span>  


        三、将student类实例化。

       

[csharp] view plain copy
 
 技术分享技术分享
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">static void Main(string[] args)  
  2.         {  
  3.             Student zhouzhou = new Student();  
  4.             zhouzhou.GetInfo();  
  5.         }</span>  


        这里主要想说一下怎样在派生类中重写基类的方法,首先要在基类中声明的方法前virtual关键字,然后在派生类中的方法前加上override关键字即可。如果派生类中的成员变量和基类的成员变量名称相同访问的时候要加上关键字new。而访问重写的方法就要用到关键字base关键字。







以上是关于C#中的继承的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# 中的集合类(如 ArrayList)继承自多个接口,如果其中一个接口继承自其余接口?

C#对继承的理解

C#中的继承

C#中的继承与多态还有接口

我发现很难理解 C# 中的继承 [关闭]

C# 中的 C++ 模板继承等价物是啥?