c 獲取父類 C 中子類呼叫父類的實現方法

2021-10-12 14:43:59 字數 2947 閱讀 2194

一、通過子類無參建構函式建立子類例項

建立父類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("我是人,我的名字叫", name);

public class student : person

public student()

console.writeline("我是學生");

public student(string name)

console.writeline("我是學生,我的名字叫", 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("我是學生,我的名字叫", name);

客戶端student student = new student("小明");

console.readkey();

輸出結果:

我是人,我的名字叫小明

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

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

在父類person中增加乙個name公共屬性,並在父類的建構函式中對name屬性賦值。

public class person

public string name

public person()

console.writeline("我是人");

public person(string name)

this.name = name;

console.writeline("我是人,我的名字叫", name);

在客戶端:

student student = new student("小明");

console.writeline("子類獲取父類的name屬性值為", 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("我是學生,我的名字叫", name);

private static string converttoupper(string name)

return name.toupper();

輸出結果:

我是人,我的名字叫darren

我是學生,我的名字叫darren

子類獲取父類的name屬性值為darren

總結:①.通過子類無參建構函式建立子類例項,會預設呼叫父類的無參建構函式②.通過子類有參建構函式建立子類例項,也會預設呼叫父類的無參建構函式③.在子類建構函式中通過base關鍵字指明父類建構函式,當通過子類建構函式建立例項,會呼叫指明的、父類的建構函式④.父類的公共屬性可以通過子類來賦值,子類也可以獲取到父類的公共屬性

c 獲取父類 C 子類如何呼叫父類

c 中子類是如何呼叫父類的?帶著這個問題,體驗如下 通過子類無參建構函式建立子類例項 建立父類person和子類student。public class person public class student person 在客戶端通過子類無參建構函式建立子類例項。class program 輸出結...

c 獲取父類 C 子類如何呼叫父類

c 中子類是如何呼叫父類的?帶著這個問題,體驗如下 通過子類無參建構函式建立子類例項 建立父類person和子類student。public class person public class student person 在客戶端通過子類無參建構函式建立子類例項。class program 輸出結...

C 子類如何呼叫父類

c 中子類是如何呼叫父類的?帶著這個問題,體驗如下 通過子類無參建構函式建立子類例項 建立父類person和子類student。public class person public class student person 在客戶端通過子類無參建構函式建立子類例項。class program 輸出結...