C 物件的初始化順序

2021-10-08 08:37:40 字數 1700 閱讀 7919

當構造乙個c#物件時,理解物件的字段和建構函式的順序是非常重要的:

derived static fields//派生類靜態字段

derived static constructor//派生來靜態建構函式

derived instance fields//派生類例項字段

base static fields//基類靜態字段

base static constructor//基類靜態建構函式

base instance fields//基類例項字段

base instance constructor//基類例項建構函式

derived instance constructor//派生類例項建構函式

下面是簡單的**:

using system;

namespace objectinit

}class base

static base()

private tracker m_field1 = new tracker( "base.instance.field1″ );

private tracker m_field2 = new tracker( "base.instance.field2″ );

private tracker m_field3;

static private tracker s_field1 = new tracker( "base.static.field1″ );

static private tracker s_field2 = new tracker( "base.static.field2″ );

virtual public void virtual()

}class derived : base

static derived()

private tracker m_field1 = new tracker( "derived.instance.field1″ );

private tracker m_field2 = new tracker( "derived.instance.field2″ );

private tracker m_field3;

static private tracker s_field1 = new tracker( "derived.static.field1″ );

static private tracker s_field2 = new tracker( "derived.static.field2″ );

override public void virtual()

}class tracker

}}

下面是程式執行結果:

derived.static.field1

derived.static.field2

derived.static.constructor

derived.instance.field1

derived.instance.field2

base.static.field1

base.static.field2

base.static.constructor

base.instance.field1

base.instance.field2

base.instance.constructor

base.instance.field3

c 物件初始化順序

c 物件初始化 1.先變數後建構函式。變數先被初始化 然後建構函式被執行 2.先靜態化後例項化。當乙個類被訪問時 靜態變數和建構函式最先被初始化 接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式 派生物件在基物件之前被初始化.比如 c類派生自b類 b類派生自a類 ...

物件的初始化順序

由 static 關鍵字修飾的 如 類變數 靜態變數 靜態 塊 將在類被初始化建立例項物件之前被初始化,而且是按順序從上到下依次被執行 沒有 static 關鍵字修飾的 如 例項變數 非靜態變數 非靜態 塊 初始化實際上是會被提取到類的構造器中被執行的,但是會比類構造器中的 塊優先執行到,其也是按順...

物件的初始化順序

publicclass 初始化順序 static static public 初始化順序 publicstaticvoidmain string args 輸出結果為 靜態快1 靜態快2,非靜態快 1,非靜態快 2,構造方法 由上面這個類分析結果如下 1 乙個類中可以存在多個靜態塊與非靜態塊 2 多...