2013-01-15 98 views
0

在C#4.0及更高版本中,是否在創建類的靜態變量(即分配的內存)時嚴格定義(在任何可能的編譯器中?我可以確定在進入任何已創建實例的構造函數之前,該類的靜態變量已經被分配了嗎?靜態變量聲明的時間

請看下面的例子:

class X 
{ 
static Vector2 v = new Vector2(); 

public X() 
    { 
    v.Set(1,1); // Can I be sure that memory for v is allocated here ? Always ?? 
    } 
} 

這被認爲是良好的編程習慣?

回答

4

是的,你可以確定。您可以參考this鏈接。不過,我沒有看到以這種方式設置該矢量的目的。也許你更喜歡靜態構造函數,如:

static X() 
{ 
    v.Set(1, 1); 
} 
+2

@spender感謝您使用文檔的更新版本編輯我的文章,我應該已經檢查過。 – Mir

+1

+1尤其值得注意的是,在實例構造函數中設置靜態字段很可能會引起麻煩。我還會注意到,'Set'方法暗示了一個可變結構,這也是一個麻煩。 – phoog