1. 程式人生 > >C#中子類調用父類的實現方法

C#中子類調用父類的實現方法

地址 public static evel ott word文檔 ase 正則表達式 跑步

本文實例講述了C#中實現子類調用父類的方法,分享給大家供大家參考之用。具體方法如下:


一、通過子類無參構造函數創建子類實例

創建父類Person和子類Student。

public class Person
{
    public Person()
    {
      Console.WriteLine("我是人");
    }
}
public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學生");
    }
}

在客戶端通過子類無參構造函數創建子類實例。

class Program
{
    static void Main(string[] args)
    {
      Student student = new Student();
      Console.ReadKey();
    }
}

輸出結果:

我是人
我是學生

可見:通過調用子類無參構造函數創建子類實例,會默認調用父類無參構造函數。

如果把父類的無參構造函數去掉,會怎樣呢?

–結果會報”Person不包含0個參數的構造函數”錯。


二、通過子類有參構造函數創建子類實例

再同時為子類和父類添加有參構造函數。

public class Person
{
    public Person()
    {
      Console.WriteLine("我是人");
    }
    public Person(string name)
    {
      Console.WriteLine("我是人,我的名字叫{0}", name);
    }
}
public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學生");
    }
    public Student(string name)
    {
      Console.WriteLine("我是學生,我的名字叫{0}", name);
    }
}

在客戶端通過子類有參構造函數創建子類實例。

Student student = new Student("小明");
Console.ReadKey();

輸出結果:

我是人
我是學生,我的名字叫小明

可見:通過調用子類有參構造函數,同樣默認會調用父類無參構造函數。


三、在子類中明確指出調用哪個父類構造函數

以上,默認調用了父類的無參構造函數,但如何調用父類的有參構造函數呢?

–在子類中使用base

在子類Student中的有參構造函數中使用base,明確調用父類有參構造函數。

public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學生");
    }
    public Student(string name)
      : base(name)
    {
      Console.WriteLine("我是學生,我的名字叫{0}", name);
    }
}

客戶端

Student student = new Student("小明");
Console.ReadKey();

輸出結果:

我是人,我的名字叫小明
我是學生,我的名字叫小明


四、通過子類設置父類的公共屬性

在父類Person中增加一個Name公共屬性,並在父類的構造函數中對Name屬性賦值。

public class Person
{
    public string Name { get; set; }
    public Person()
    {
      Console.WriteLine("我是人");
    }
    public Person(string name)
    {
      this.Name = name;
      Console.WriteLine("我是人,我的名字叫{0}", name);
    }
}

在客戶端:

Student student = new Student("小明");
Console.WriteLine("子類獲取父類的Name屬性值為{0}", student.Name);
Console.ReadKey();

輸出結果:

我是人,我的名字叫小明
我是學生,我的名字叫小明
子類獲取父類的Name屬性值為小明

以上代碼的執行路徑是:


→調用子類有參構造函數,並把該參數傳值給父類有參構造函數

→調用父類有參構造函數,並給父類公共屬性Name賦值

→子類實例調用父類的公共屬性

其實,以上的做法在分層架構設計中已經得到了很好的使用。在分層架構中,通常會為所有的Repository創建一個基類,在基類中設計一個代表當前Repository的屬性,並在基類的構造函數中為該屬性賦值;最終,在創建子類Repository實例時,在為基類的、代表當前Repository的公共屬性賦值。

在子類中,當父類通過base拿到子類的參數時,還可以對該參數做一些處理,比如代表父類的base把從子類拿到的參數轉換成大寫。

public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學生");
    }
    public Student(string name)
      : base(ConvertToUpper(name))
    {
      Console.WriteLine("我是學生,我的名字叫{0}", name);
    }
    private static string ConvertToUpper(string name)
    {
      return name.ToUpper();
    }
}

輸出結果:

我是人,我的名字叫DARREN
我是學生,我的名字叫darren
子類獲取父類的Name屬性值為DARREN


總結:

①.

通過子類無參構造函數創建子類實例,會默認調用父類的無參構造函數


②.

通過子類有參構造函數創建子類實例,也會默認調用父類的無參構造函數


③.

在子類構造函數中通過base關鍵字指明父類構造函數,當通過子類構造函數創建實例,會調用指明的、父類的構造函數


④.

父類的公共屬性可以通過子類來賦值,子類也可以獲取到父類的公共屬性

相信通過本文上述實例的分析,可以加深大家對C#類的初始化與繼承的理解。希望本文所述對大家進一步的學習C#程序設計有所幫助。

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
C#中子類調用父類的實現方法

本文地址: http://www.paobuke.com/develop/c-develop/pbk23556.html






相關內容

技術分享圖片C#·éDD??D?3ìDòéè??′ú??技術分享圖片談談C# replace在正則表達式中的意義技術分享圖片C#中Equals方法的常見誤解技術分享圖片C#使用CDO發送郵件的方法
技術分享圖片C#圖像對比度調整的方法技術分享圖片C#獲取真實IP地址實現方法技術分享圖片C#采用OpenXml實現給word文檔添加文字技術分享圖片C#實現通過winmm.dll控制聲音播放的方法

C#中子類調用父類的實現方法