C 建構函式在繼承過程中的執行順序

2021-04-18 04:21:12 字數 2865 閱讀 9362

using system;

namespace zoo

public animal()

protected animal(string skincolor)

}

//************

定義子類

horse

繼承父類

animal

public class horse : animal

double _weight;

string _***;

public horse(string skincolor,string ***,double weight):base(skincolor)

}

//************

定義測試類

demo

public class demo

} }

測試demo

類中main()

方法不同情況下的結果,研究建構函式的執行過程 1

.只執行

animal a = new animal

();

結果:動物

乙隻動物出生了!!!

執行過程:

首先執行基類

animal

的靜態建構函式

static animal

(),在例項化

a時執行公共的無參建構函式

public animal

();

說明:類的靜態建構函式屬於類所有,不必生成例項就可以訪問,它是在載入包含類的應用程式時建立的,但靜態建構函式不能訪問類的例項變數。類的例項成員屬於類的例項所有,沒有建立例項物件就無法對其進行訪問,例項成員可以訪問類的靜態成員和其它例項成員。

類的靜態成員屬於該類,非靜態成員則屬於這個類的某個例項在乙個類的例項物件的生命週期中最先執行的**就是類的建構函式。建構函式是用來初始化物件的特殊型別的函式。 2

.只執行

horse h=new horse();

結果:動物

乙隻動物出生了!!!

一頭小馬駒出生了

…….

這頭小馬駒的顏色為:赤兔馬的紅

執行過程:

首先執行基類

animal

的靜態建構函式

static animal

(),再例項化基類

animal

時執行公共的無參建構函式

public animal

();再然後呼叫

horse

類的無參建構函式

public horse() 3

.只執行

horse h=new horse("

純白色",」

雄性」,320);

結果:動物

這只動物的顏色為:純白色

一頭小馬駒出生了

…….

這頭小馬駒為:雄性

這頭小馬駒的顏色為:純白色

這頭小馬駒的體重為:

320

執行過程:

首先執行基類

animal

的靜態建構函式

static animal

(),再例項化基類

animal

時執行protected帶參建構函式

public animal

(string skincolor);再然後呼叫

horse

類的帶參建構函式

public horse(string skincolor, string skincolor , double weight):base(skincolor)

4.只執行

horse h=new horse("

純白色", 「

雄性」, 320);

horse hh=new horse("

純色", 「

雌性」, 120);

結果:動物

這只動物的顏色為:純白色

一頭小馬駒出生了

…….

這頭小馬駒為:雄性

這頭小馬駒的顏色為:純白色

這頭小馬駒的體重為:

320

這只動物的顏色為:純色

一頭小馬駒出生了

…….

這頭小馬駒為:雌性

這頭小馬駒的顏色為:純色

這頭小馬駒的體重為:

120

說明:類的靜態建構函式在給定應用程式域中至多執行一次:只有建立類的例項或者引用類的任何靜態成員才激發靜態建構函式;

最後作乙個總結

: 1.

一般原理是被繼承的父類先構造

,繼承於父類的子類後構造; 2.

靜態建構函式

,靜態引數都是優先於非靜態建構函式

,非靜態引數構造;

3.靜態建構函式:(1

)用於對靜態字段、唯讀欄位等的初始化。(2

)新增static

關鍵字,不能新增訪問修飾符,因為靜態建構函式都是私有的。(3

)類的靜態建構函式在給定應用程式域中至多執行一次:只有建立類的例項或者引用類的任何靜態成員才激發靜態建構函式(4

)靜態建構函式是不可繼承的,而且不能被直接呼叫。

4.建構函式就是在建立類物件的時候呼叫

,用來初始化類中的字段以及完成一些呼叫等工作

5.建構函式是構造物件時呼叫。如果你不夠構造物件,怎麼能使用建構函式。在子類中,當然不能繼承父類函式。如果能繼承,那麼你就可以在子類中呼叫建構函式了,而建立物件時,是系統管理呼叫建構函式,我們自己不能呼叫類的建構函式。子類在實現化時,首先呼叫父類建構函式,例項化父類。之後才是子類自身例項化。

總算寫完了,關於

c#的建構函式的學習暫時就告一段落,接下來是介面的學習!

繼承過程中建構函式的執行順序

基類一定要寫預設建構函式 無引數的建構函式 因為無法預見派生類的物件是否呼叫預設建構函式。如果派生類物件呼叫預設建構函式,則構造基類物件時只能呼叫預設建構函式,如果不寫,將會出錯。建構函式和析構函式均不被繼承。建構函式的呼叫順序 1 基類建構函式,按照被繼承時宣告的順序 2 成員物件初始化,按照類中...

C 中對繼承過程中構造函式呼叫的理解

1 例項化派生類時,需要先呼叫基類中的建構函式 2 基類中沒有定義建構函式,則系統會定義預設無參建構函式.如果新增有參建構函式,則預設的無參建構函式將會被覆蓋,3 派生類例項化時,可以通過base指定需要呼叫的建構函式,呼叫無參建構函式,可省略 base clerk基類 class clerk pu...

c 過程中遇到的關於建構函式和繼承的問題

3 學習c 過程中遇到的關於建構函式和繼承的問題 using system using system.collections.generic using system.text class car vechicle static void main string args 問題如下 1 建構函式 是...