C#中子類(lèi)調(diào)用父類(lèi)的實(shí)現(xiàn)方法
本文實(shí)例講述了C#中實(shí)現(xiàn)子類(lèi)調(diào)用父類(lèi)的方法,分享給大家供大家參考之用。具體方法如下:
一、通過(guò)子類(lèi)無(wú)參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例
創(chuàng)建父類(lèi)Person和子類(lèi)Student。
public class Person { public Person() { Console.WriteLine("我是人"); } } public class Student : Person { public Student() { Console.WriteLine("我是學(xué)生"); } }
在客戶(hù)端通過(guò)子類(lèi)無(wú)參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例。
class Program { static void Main(string[] args) { Student student = new Student(); Console.ReadKey(); } }
輸出結(jié)果:
我是人 我是學(xué)生
可見(jiàn):通過(guò)調(diào)用子類(lèi)無(wú)參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例,會(huì)默認(rèn)調(diào)用父類(lèi)無(wú)參構(gòu)造函數(shù)。
如果把父類(lèi)的無(wú)參構(gòu)造函數(shù)去掉,會(huì)怎樣呢?
--結(jié)果會(huì)報(bào)"Person不包含0個(gè)參數(shù)的構(gòu)造函數(shù)"錯(cuò)。
二、通過(guò)子類(lèi)有參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例
再同時(shí)為子類(lèi)和父類(lèi)添加有參構(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); } }
在客戶(hù)端通過(guò)子類(lèi)有參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例。
Student student = new Student("小明"); Console.ReadKey();
輸出結(jié)果:
我是人 我是學(xué)生,我的名字叫小明
可見(jiàn):通過(guò)調(diào)用子類(lèi)有參構(gòu)造函數(shù),同樣默認(rèn)會(huì)調(diào)用父類(lèi)無(wú)參構(gòu)造函數(shù)。
三、在子類(lèi)中明確指出調(diào)用哪個(gè)父類(lèi)構(gòu)造函數(shù)
以上,默認(rèn)調(diào)用了父類(lèi)的無(wú)參構(gòu)造函數(shù),但如何調(diào)用父類(lèi)的有參構(gòu)造函數(shù)呢?
--在子類(lèi)中使用base
在子類(lèi)Student中的有參構(gòu)造函數(shù)中使用base,明確調(diào)用父類(lèi)有參構(gòu)造函數(shù)。
public class Student : Person { public Student() { Console.WriteLine("我是學(xué)生"); } public Student(string name) : base(name) { Console.WriteLine("我是學(xué)生,我的名字叫{0}", name); } }
客戶(hù)端
Student student = new Student("小明"); Console.ReadKey();
輸出結(jié)果:
我是人,我的名字叫小明 我是學(xué)生,我的名字叫小明
四、通過(guò)子類(lèi)設(shè)置父類(lèi)的公共屬性
在父類(lèi)Person中增加一個(gè)Name公共屬性,并在父類(lèi)的構(gòu)造函數(shù)中對(duì)Name屬性賦值。
public class Person { public string Name { get; set; } public Person() { Console.WriteLine("我是人"); } public Person(string name) { this.Name = name; Console.WriteLine("我是人,我的名字叫{0}", name); } }
在客戶(hù)端:
Student student = new Student("小明"); Console.WriteLine("子類(lèi)獲取父類(lèi)的Name屬性值為{0}", student.Name); Console.ReadKey();
輸出結(jié)果:
我是人,我的名字叫小明 我是學(xué)生,我的名字叫小明 子類(lèi)獲取父類(lèi)的Name屬性值為小明
以上代碼的執(zhí)行路徑是:
→調(diào)用子類(lèi)有參構(gòu)造函數(shù),并把該參數(shù)傳值給父類(lèi)有參構(gòu)造函數(shù)
→調(diào)用父類(lèi)有參構(gòu)造函數(shù),并給父類(lèi)公共屬性Name賦值
→子類(lèi)實(shí)例調(diào)用父類(lèi)的公共屬性
其實(shí),以上的做法在分層架構(gòu)設(shè)計(jì)中已經(jīng)得到了很好的使用。在分層架構(gòu)中,通常會(huì)為所有的Repository創(chuàng)建一個(gè)基類(lèi),在基類(lèi)中設(shè)計(jì)一個(gè)代表當(dāng)前Repository的屬性,并在基類(lèi)的構(gòu)造函數(shù)中為該屬性賦值;最終,在創(chuàng)建子類(lèi)Repository實(shí)例時(shí),在為基類(lèi)的、代表當(dāng)前Repository的公共屬性賦值。
在子類(lèi)中,當(dāng)父類(lèi)通過(guò)base拿到子類(lèi)的參數(shù)時(shí),還可以對(duì)該參數(shù)做一些處理,比如代表父類(lèi)的base把從子類(lèi)拿到的參數(shù)轉(zhuǎn)換成大寫(xiě)。
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 子類(lèi)獲取父類(lèi)的Name屬性值為DARREN
總結(jié):
①.通過(guò)子類(lèi)無(wú)參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例,會(huì)默認(rèn)調(diào)用父類(lèi)的無(wú)參構(gòu)造函數(shù)
②.通過(guò)子類(lèi)有參構(gòu)造函數(shù)創(chuàng)建子類(lèi)實(shí)例,也會(huì)默認(rèn)調(diào)用父類(lèi)的無(wú)參構(gòu)造函數(shù)
③.在子類(lèi)構(gòu)造函數(shù)中通過(guò)base關(guān)鍵字指明父類(lèi)構(gòu)造函數(shù),當(dāng)通過(guò)子類(lèi)構(gòu)造函數(shù)創(chuàng)建實(shí)例,會(huì)調(diào)用指明的、父類(lèi)的構(gòu)造函數(shù)
④.父類(lèi)的公共屬性可以通過(guò)子類(lèi)來(lái)賦值,子類(lèi)也可以獲取到父類(lèi)的公共屬性
相信通過(guò)本文上述實(shí)例的分析,可以加深大家對(duì)C#類(lèi)的初始化與繼承的理解。希望本文所述對(duì)大家進(jìn)一步的學(xué)習(xí)C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#開(kāi)發(fā)答題贏錢(qián)游戲(自動(dòng)答題器)
現(xiàn)在最火的直播游戲,那就是答題贏錢(qián)直播了,如百萬(wàn)英雄、芝士超人、花椒直播、沖頂大會(huì)等等,這些游戲的玩法都很簡(jiǎn)單,答對(duì)12題即可瓜分獎(jiǎng)金了。玩法雖簡(jiǎn)單但是完全答對(duì)12題難度就挺高了,下面小編給大家?guī)?lái)了C#開(kāi)發(fā)答題贏錢(qián)游戲,需要的朋友參考下吧2018-01-01深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(上)
這篇文章主要介紹了如何學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程的相關(guān)知識(shí),文中講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06C#使用Windows Service的簡(jiǎn)單教程(創(chuàng)建、安裝、卸載、調(diào)試)
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建、安裝、卸載、調(diào)試Windows Service(Windows 服務(wù))的簡(jiǎn)單教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01C#實(shí)現(xiàn)給DevExpress中GridView表格指定列添加進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)給DevExpress中GridView表格指定列添加進(jìn)度條顯示效果,感興趣的小伙伴可以嘗試一下2022-06-06C#實(shí)現(xiàn)啟動(dòng)項(xiàng)管理的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)啟動(dòng)項(xiàng)管理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下2022-12-12