本文我們將考察類型能定義的某些特殊成員在大力簡化處理類型及其對象實例需要的語法方面這些類型有助於面向對象設計
類型構造器
你已經熟悉了什麼是構造器它負責對象實例狀態的初始化除了實例構造器以外Microsoft(r)NET公共語言運行時(CLR)還支持類型構造器(也叫做靜態構造器類構造器或類型初始化)類型構造器可被應用到接口類和數值類型它允許任何在類型中聲明的成員被訪問之前實現必要的初始化類型構造器不需要參數並且總是返回void類型類型構造器只訪問類型的靜態字段並且其通常的目的是初始化這些字段在類型的任何實例被創建之前以及類型的任何靜態字段或方法被引用之前必須要保證已經運行了類型構造器
許多語言(包括C#)在定義類型時都自動產生類型構造器但是某些語言需要顯式(手工)實現類型構造器
為了理解類型構造器讓我們研究一下列在C#中定義的類型
class Atype {
static int x = ;
}
在建立這個代碼時編譯器自動地為產生Atype類型構造器這個構造器負責初始化靜態字段x為值如果你使用ILDasm很容易認出類型構造器方法因為它們的名字都是cctor(對於類構造器而言)
在C#中通過在類型中定義靜態構造器方法你可以自己實現類型構造器關鍵字static的使用意味著這時類型構造器而不是實例構造器下面是一個非常簡單的例子
class AType {
static int x;
static AType() {
x = ;
}
}
這個類型定義與前面的相同注意類型構造器決不能試圖創建自己的類型實例而且構造器也不能引用類型的非靜態成員
最後如果你用C#編譯器編譯下列代碼它產生單獨的類型構造器方法
class AType {
static int x = ;
static AType() {
x = ;
}
}
這個構造器首先初始化x=然後初始化x=換句話說編譯器產生的結果類型構造器首先包含靜態字段的初始化代碼隨後是類型構造器的代碼
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15662.html