国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中子類調(diào)用父類的實現(xiàn)方法

2020-01-24 02:27:04
字體:
供稿:網(wǎng)友

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

一、通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例

創(chuàng)建父類Person和子類Student。

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

在客戶端通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例。

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

輸出結(jié)果:

我是人我是學(xué)生

可見:通過調(diào)用子類無參構(gòu)造函數(shù)創(chuàng)建子類實例,會默認調(diào)用父類無參構(gòu)造函數(shù)。

如果把父類的無參構(gòu)造函數(shù)去掉,會怎樣呢?
--結(jié)果會報"Person不包含0個參數(shù)的構(gòu)造函數(shù)"錯。

二、通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例

再同時為子類和父類添加有參構(gòu)造函數(shù)。

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

在客戶端通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例。

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

輸出結(jié)果:

我是人我是學(xué)生,我的名字叫小明

可見:通過調(diào)用子類有參構(gòu)造函數(shù),同樣默認會調(diào)用父類無參構(gòu)造函數(shù)。

三、在子類中明確指出調(diào)用哪個父類構(gòu)造函數(shù)

以上,默認調(diào)用了父類的無參構(gòu)造函數(shù),但如何調(diào)用父類的有參構(gòu)造函數(shù)呢?
--在子類中使用base

在子類Student中的有參構(gòu)造函數(shù)中使用base,明確調(diào)用父類有參構(gòu)造函數(shù)。

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

客戶端

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

輸出結(jié)果:

我是人,我的名字叫小明我是學(xué)生,我的名字叫小明

四、通過子類設(shè)置父類的公共屬性

在父類Person中增加一個Name公共屬性,并在父類的構(gòu)造函數(shù)中對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();  

輸出結(jié)果:

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

以上代碼的執(zhí)行路徑是:

→調(diào)用子類有參構(gòu)造函數(shù),并把該參數(shù)傳值給父類有參構(gòu)造函數(shù)
→調(diào)用父類有參構(gòu)造函數(shù),并給父類公共屬性Name賦值
→子類實例調(diào)用父類的公共屬性

其實,以上的做法在分層架構(gòu)設(shè)計中已經(jīng)得到了很好的使用。在分層架構(gòu)中,通常會為所有的Repository創(chuàng)建一個基類,在基類中設(shè)計一個代表當(dāng)前Repository的屬性,并在基類的構(gòu)造函數(shù)中為該屬性賦值;最終,在創(chuàng)建子類Repository實例時,在為基類的、代表當(dāng)前Repository的公共屬性賦值。

在子類中,當(dāng)父類通過base拿到子類的參數(shù)時,還可以對該參數(shù)做一些處理,比如代表父類的base把從子類拿到的參數(shù)轉(zhuǎn)換成大寫。

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

輸出結(jié)果:

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

總結(jié):

①.通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例,會默認調(diào)用父類的無參構(gòu)造函數(shù)
②.通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例,也會默認調(diào)用父類的無參構(gòu)造函數(shù)
③.在子類構(gòu)造函數(shù)中通過base關(guān)鍵字指明父類構(gòu)造函數(shù),當(dāng)通過子類構(gòu)造函數(shù)創(chuàng)建實例,會調(diào)用指明的、父類的構(gòu)造函數(shù)
④.父類的公共屬性可以通過子類來賦值,子類也可以獲取到父類的公共屬性

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通海县| 中西区| 虹口区| 长兴县| 登封市| 云浮市| 枝江市| 井陉县| 宜昌市| 阿鲁科尔沁旗| 得荣县| 宁安市| 开江县| 楚雄市| 阳泉市| 张家口市| 兴城市| 山东| 上栗县| 甘肃省| 宁阳县| 南和县| 濮阳市| 广宗县| 聊城市| 南召县| 溆浦县| 广宁县| 丹棱县| 利川市| 泗水县| 军事| 江华| 富宁县| 合江县| 漾濞| 漳州市| 香格里拉县| 焉耆| 沾益县| 古交市|