C#中子類調(diào)用父類的實現(xiàn)方法
本文實例講述了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)建子類實例,會默認(rèn)調(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ù),同樣默認(rèn)會調(diào)用父類無參構(gòu)造函數(shù)。
三、在子類中明確指出調(diào)用哪個父類構(gòu)造函數(shù)
以上,默認(rèn)調(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)建子類實例,會默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)
②.通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例,也會默認(rèn)調(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#類的初始化與繼承的理解。希望本文所述對大家進(jìn)一步的學(xué)習(xí)C#程序設(shè)計有所幫助。
相關(guān)文章
C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的方式
這篇文章主要給大家介紹了關(guān)于C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
WinForm DataGridView控件隔行變色的小例子
WinForm的DataGridView控件設(shè)置行的顏色2013-03-03

