c# 類型構(gòu)造器
更新時(shí)間:2012年10月29日 13:46:42 作者:
CLR還支持類型構(gòu)造器,也稱為靜態(tài)構(gòu)造器。c#類型構(gòu)造器可應(yīng)用引用類型和值類型,永遠(yuǎn)沒(méi)有參數(shù)
主要作用是:設(shè)置類型中靜態(tài)字段的初始化。類型構(gòu)造器不一定要在類中定義,但是最多也只能有一個(gè)。例:
class SomeType{
static SomeType(){}
}
jit編譯器在編譯一個(gè)方法時(shí),會(huì)查看代碼引用哪些類型。任何類型定義了類型構(gòu)造器,jit編譯器都會(huì)檢查當(dāng)前AppDomain是否已經(jīng)執(zhí)行了這個(gè)類型構(gòu)造器,如果沒(méi)有就執(zhí)行,已經(jīng)執(zhí)行了就直接返回,不再次執(zhí)行。在多線程的環(huán)境下,可能同一時(shí)間有多個(gè)執(zhí)行相同的方法,CLR希望每一個(gè)AppDomain中一個(gè)類型構(gòu)造器只執(zhí)行一次,在調(diào)用類型構(gòu)造器時(shí),使用互斥線程同步鎖,解決這個(gè)問(wèn)題。
類型構(gòu)造器中只能訪問(wèn)類型的靜態(tài)字段,一般只是初始化這些字段。
代碼內(nèi)聯(lián)初始化字段:
class SomeType
{
Static int x = 5;
}
等價(jià)于
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
還有:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等價(jià)于
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
雖然c#不允許值類型為它的實(shí)例化字段使用內(nèi)聯(lián)初始化語(yǔ)法,但是靜態(tài)字段可以的,以上把class改成struct一樣可以運(yùn)行,
主要原因是:值類型可以定義無(wú)參類型構(gòu)造器,但是不可以定義無(wú)參類型實(shí)例構(gòu)造器。
復(fù)制代碼 代碼如下:
class SomeType{
static SomeType(){}
}
jit編譯器在編譯一個(gè)方法時(shí),會(huì)查看代碼引用哪些類型。任何類型定義了類型構(gòu)造器,jit編譯器都會(huì)檢查當(dāng)前AppDomain是否已經(jīng)執(zhí)行了這個(gè)類型構(gòu)造器,如果沒(méi)有就執(zhí)行,已經(jīng)執(zhí)行了就直接返回,不再次執(zhí)行。在多線程的環(huán)境下,可能同一時(shí)間有多個(gè)執(zhí)行相同的方法,CLR希望每一個(gè)AppDomain中一個(gè)類型構(gòu)造器只執(zhí)行一次,在調(diào)用類型構(gòu)造器時(shí),使用互斥線程同步鎖,解決這個(gè)問(wèn)題。
類型構(gòu)造器中只能訪問(wèn)類型的靜態(tài)字段,一般只是初始化這些字段。
代碼內(nèi)聯(lián)初始化字段:
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x = 5;
}
等價(jià)于
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
還有:
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等價(jià)于
復(fù)制代碼 代碼如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
雖然c#不允許值類型為它的實(shí)例化字段使用內(nèi)聯(lián)初始化語(yǔ)法,但是靜態(tài)字段可以的,以上把class改成struct一樣可以運(yùn)行,
主要原因是:值類型可以定義無(wú)參類型構(gòu)造器,但是不可以定義無(wú)參類型實(shí)例構(gòu)造器。
相關(guān)文章
C#使用XmlDocument或XDocument創(chuàng)建xml文件
這篇文章主要為大家詳細(xì)介紹了C#使用XmlDocument或XDocument創(chuàng)建xml文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
在WPF中動(dòng)態(tài)加載XAML中的控件實(shí)例代碼
這篇文章主要介紹了在WPF中動(dòng)態(tài)加載XAML中的控件,實(shí)例分析了WPF中針對(duì)XAML中控件的動(dòng)態(tài)調(diào)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
C#根據(jù)excel數(shù)據(jù)繪制坐標(biāo)圖的方法
這篇文章主要為大家詳細(xì)介紹了C#根據(jù)excel數(shù)據(jù)繪制坐標(biāo)圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

