C 中類中建構函式的執行序列

2021-07-10 11:07:05 字數 2145 閱讀 7356

所有的類都至少包含乙個建構函式。這些建構函式中可能有乙個預設的建構函式,預設的建構函式沒有引數,與類同名。其它帶引數的建構函式稱為非預設的建構函式。

在類的外部不能用私有的建構函式例項化物件,通過把預設的建構函式設定為私有,就可以強制類的使用者使用非預設的建構函式。

一些類沒有公共的建構函式,外部**就不能例項化它。

靜態成員,也稱為共享成員,可以在類的例項之間共享。靜態成員通過類直接引用。

乙個類只能有乙個靜態的建構函式,該建構函式不能有訪問修飾符,也不能帶任何引數。靜態建構函式不能直接呼叫,只能在下述情況下執行:

(1)建立包含靜態建構函式的類的例項時

(2)訪問包含靜態建構函式的類的靜態成員時

非靜態建構函式也稱例項建構函式。

靜態類只包含靜態成員,且不能用於例項化物件(如console)。

任何建構函式都可以配置為在執行自己的**前呼叫其他建構函式。

建立類的例項時,會呼叫類的建構函式,為了例項化派生的類,必須例項化它的基類;要例項化這個基類,有必須例項化這個基類的基類,這樣一直例項化system.object(所有類的根),因此無論使用什麼建構函式例項化乙個類,總是首先呼叫system.object.object().

下面用例子說明建構函式的執行順序:

publicclass mybaseclass

public mybaseclass(int i)

} publicclass myderivedclass:mybaseclass

public myderivedclass(int i)

public myderivedclass(int i,int j)

} 使用下面語句例項化myderivedclass

myderivedclass myobj=new myderivedclass();

建構函式執行順序如下:

(1)執行system.object.object()

(2)執行mybaseclass.mybaseclass()

(3)執行myderivedclass.myderivedclass()

另外,使用下面語句例項化myderivedclass

myderivedclass myobj=newmyderivedclass(4,8);

建構函式執行順序如下:

(1)執行system.object.object()

(2)執行mybaseclass.mybaseclass()

(3)執行myderivedclass.myderivedclass(int i,int j)

如果我們想要得到下面的執行順序:

(1)執行system.object.object()

(2)執行mybaseclass.mybaseclass(inti)

(3)執行myderivedclass.myderivedclass(int i,int j)

可以使用base關鍵字指定.net例項化過程中使用基類中具有指定引數的建構函式,即:

publicclass myderivedclass:mybaseclass

public myderivedclass(int i)

public myderivedclass(int i,int j):base(i)}

這樣將不會呼叫mybaseclass.mybaseclass()

除base關鍵字外,關鍵字this也可指定建構函式初始化器。這個關鍵字指定在呼叫指定的建構函式前,.net例項化過程對當前類使用非預設的建構函式。

例如:publicclass myderivedclass:mybaseclass

public myderivedclass(int i)

publicmyderivedclass(int i,int j):base(i)

} 使用myderivedclass. myderivedclass()構造類,將執行下列序列:

(1)執行system.object.object()

(2)執行mybaseclass.mybaseclass(inti)

(3)執行myderivedclass.myderivedclass(int i,int j)

(4)執行myderivedclass.myderivedclass()

C 類繼承中建構函式的執行序列示例詳解

前言 1 派生類自動包含基程式設計客棧類的所有成員。但對於基類的私有成員,派生類雖然繼承了,但是不能在派生類中訪問。2 所有的類都是按照繼承鏈從頂層基類開始向下順序構造。最頂層的基類是system.object類,所有的類都隱式派生於它。只要記住這條規則,就能理解派生類在例項化時對建構函式的呼叫過程...

C 類的繼承中,建構函式的執行順序

先看下邊的程式 class a public a string a public virtual void printfields class b a public override void printfields y x,y 如果執行 b b new b a 會輸出x 1,y 0.因為在例項化子...

C 中類的建構函式與複製建構函式

建構函式是類的特殊的成員函式,只要建立類型別的新物件,都要執行建構函式。建構函式的工作是保證每個物件的資料成員具有合適的初始值。建構函式的名字與類的名字相同,並且不能指定返回型別。像其他任何函式一樣,它們可以沒有形參,也可以定義多個形參。複製建構函式是一種特殊建構函式,具有單個形參,該形參 常用co...