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