的初始化命令在我的研究,以建立一個Singleton在C#中我碰到下面article那裏是一個簡單提一下,在C++歧義靜態變量
「的C++規範留下了一些偶然的最佳方式圍繞初始化 靜態變量的順序模糊不清。「
我最終調查了這個問題,發現this和this。基本上這個點(據我所知)是C++中靜態變量的初始化順序是未定義的。好吧,我想到目前爲止好,但後來我想明白下面的語句是,本文的後面,使
「幸運的是,.NET框架通過其 處理變量的初始化的解決了這個模棱兩可。」
所以我發現this頁面,他們說那裏的一類
的靜態字段變量初始化對應分配的 序列在文本順序 執行它們出現在類宣言。
並給出
using System;
class Test
{
static void Main() {
Console.WriteLine("{0} {1}", B.Y, A.X);
}
public static int F(string s) {
Console.WriteLine(s);
return 1;
}
}
class A
{
static A() {}
public static int X = Test.F("Init A");
}
class B
{
static B() {}
public static int Y = Test.F("Init B");
}
the output must be:
Init B
Init A
1 1
的例子「因爲用於當靜態構造執行(如在 第10.11節中定義)的規則規定,B的靜態構造(並且因此B的 靜態字段初始)必須在A的靜態構造函數和字段初始值設定項之前運行。「
但是,在我很困惑的是,我的理解是,在這些例子中靜態變量的初始化順序將根據當類中的方法或字段首次調用上,這又基於執行代碼塊的順序(這種情況從左到右)。 IE:完全獨立於類聲明的位置或順序。然而,根據我對這篇文章的解釋,它說這是由於我的測試沒有備份的那些類的聲明順序的結果?
有人能否爲我澄清這一點(以及文章試圖提出的觀點),也許提供了一個更好的例子來說明所描述的行爲?一類
非常感謝你的非常簡潔的答案。 – 2012-07-11 03:45:52