Microsoft.Net框架程序设计学习笔记(11):类型构造器
除實(shí)例構(gòu)造器外,CLR還支持類型構(gòu)造器(又稱靜態(tài)構(gòu)造器、類構(gòu)造器、類型初始化器)。類型構(gòu)造器用于設(shè)置一個類型的初始狀態(tài)。默認(rèn)情況下,一個類型中沒有定義類型構(gòu)造器,只能手動定義。且類型構(gòu)造器不能有任何參數(shù)。
示例代碼如下:
class SomeRefType{
//當(dāng)SomeRefType第一次被訪問時執(zhí)行
static SomeRefType()
{}
}
struct SomeValType
{
//當(dāng)SomeValType第一次被訪問時執(zhí)行
static SomeValType()
{}
}
類型構(gòu)造器不允許添加任何訪問限制符,它的訪問限制被自動設(shè)為私有方式。類型構(gòu)造器的調(diào)用由CLR負(fù)責(zé),CLR會在如下時間之一調(diào)用類型構(gòu)造器。
類型構(gòu)造器一旦被執(zhí)行,它在整個應(yīng)用程序域的生命周期內(nèi)都不會再次被調(diào)用 。
如果一個類型構(gòu)造器拋出一個未處理異常,CLR將認(rèn)為該類型不可用。試圖訪問其中的任何字段或方法都將拋出TypeInitializationException異常。
類型構(gòu)造器的代碼只能訪問類型的靜態(tài)字段,且通常它的目的就是初始化這些靜態(tài)字段。
以下代碼:
class SomeType{
static Int32 x = 5;
} 當(dāng)這段代碼被編譯時,編譯器會為SomeType自動產(chǎn)生一個類型構(gòu)造器,所以這段代碼等價(jià)于如下代碼: class SomeType
{
static Int32 x;
static SomeType() { x= 5; }
} 還有一點(diǎn)要注意,類型構(gòu)造器不應(yīng)該調(diào)用其基類的類型構(gòu)造器。這是因?yàn)榛愔械撵o態(tài)字段沒有被派生類型所繼承。(這可能與大家的“認(rèn)識”相反,因?yàn)楹芏啻a或在派生類型內(nèi)部引用了基類型的靜態(tài)字段,或通過派生類型引用了基類的靜態(tài)字段,這不是繼承又是啥呢?事實(shí)上這確實(shí)不是繼承,而是編譯時靜態(tài)綁定。另外,其他靜態(tài)成員,如靜態(tài)方法、靜態(tài)屬性等,也不會被派生類所繼承,同樣是編譯時靜態(tài)綁定。)
轉(zhuǎn)載于:https://www.cnblogs.com/free722/archive/2011/03/27/1996808.html
總結(jié)
以上是生活随笔為你收集整理的Microsoft.Net框架程序设计学习笔记(11):类型构造器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery CheckBox全选
- 下一篇: 微软System Center 2012