c# 類型構(gòu)造器
更新時間:2012年10月29日 13:46:42 作者:
CLR還支持類型構(gòu)造器,也稱為靜態(tài)構(gòu)造器。c#類型構(gòu)造器可應(yīng)用引用類型和值類型,永遠(yuǎn)沒有參數(shù)
主要作用是:設(shè)置類型中靜態(tài)字段的初始化。類型構(gòu)造器不一定要在類中定義,但是最多也只能有一個。例:
class SomeType{
static SomeType(){}
}
jit編譯器在編譯一個方法時,會查看代碼引用哪些類型。任何類型定義了類型構(gòu)造器,jit編譯器都會檢查當(dāng)前AppDomain是否已經(jīng)執(zhí)行了這個類型構(gòu)造器,如果沒有就執(zhí)行,已經(jīng)執(zhí)行了就直接返回,不再次執(zhí)行。在多線程的環(huán)境下,可能同一時間有多個執(zhí)行相同的方法,CLR希望每一個AppDomain中一個類型構(gòu)造器只執(zhí)行一次,在調(diào)用類型構(gòu)造器時,使用互斥線程同步鎖,解決這個問題。
類型構(gòu)造器中只能訪問類型的靜態(tài)字段,一般只是初始化這些字段。
代碼內(nèi)聯(lián)初始化字段:
class SomeType
{
Static int x = 5;
}
等價于
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
還有:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等價于
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
雖然c#不允許值類型為它的實(shí)例化字段使用內(nèi)聯(lián)初始化語法,但是靜態(tài)字段可以的,以上把class改成struct一樣可以運(yùn)行,
主要原因是:值類型可以定義無參類型構(gòu)造器,但是不可以定義無參類型實(shí)例構(gòu)造器。
復(fù)制代碼 代碼如下:
class SomeType{
static SomeType(){}
}
jit編譯器在編譯一個方法時,會查看代碼引用哪些類型。任何類型定義了類型構(gòu)造器,jit編譯器都會檢查當(dāng)前AppDomain是否已經(jīng)執(zhí)行了這個類型構(gòu)造器,如果沒有就執(zhí)行,已經(jīng)執(zhí)行了就直接返回,不再次執(zhí)行。在多線程的環(huán)境下,可能同一時間有多個執(zhí)行相同的方法,CLR希望每一個AppDomain中一個類型構(gòu)造器只執(zhí)行一次,在調(diào)用類型構(gòu)造器時,使用互斥線程同步鎖,解決這個問題。
類型構(gòu)造器中只能訪問類型的靜態(tài)字段,一般只是初始化這些字段。
代碼內(nèi)聯(lián)初始化字段:
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x = 5;
}
等價于
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
還有:
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等價于
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
雖然c#不允許值類型為它的實(shí)例化字段使用內(nèi)聯(lián)初始化語法,但是靜態(tài)字段可以的,以上把class改成struct一樣可以運(yùn)行,
主要原因是:值類型可以定義無參類型構(gòu)造器,但是不可以定義無參類型實(shí)例構(gòu)造器。
相關(guān)文章
C#序列化與反序列化(Serialize,Deserialize)實(shí)例詳解
這篇文章主要介紹了C#序列化與反序列化(Serialize,Deserialize)的方法,實(shí)例分析了C#序列化與反序列化的常見技巧,需要的朋友可以參考下2015-06-06C#實(shí)現(xiàn)微信公眾號群發(fā)消息(解決一天只能發(fā)一次的限制)實(shí)例分享
經(jīng)過幾天研究網(wǎng)上的代碼和謝燦大神的幫忙,今天終于用C#實(shí)現(xiàn)了微信公眾號群發(fā)消息,現(xiàn)在分享一下2013-09-09