2012-07-16 147 views
1

可能重複:
What is the use of static constructors?靜態構造函數有用

從MSDN: - 「如果一個靜態構造函數拋出異常,運行時就不會調用它第二次,並且該類型在您的程序運行所在的應用程序域的生命週期中將保持未初始化狀態。「

你仍然使用靜態構造函數進行編程構造?在這裏,我試圖列出在哪裏和哪裏不應該通過使用靜態構造函數來利用CLR提供的好處。

回答

4

你仍然可以使用靜態構造函數編程結構?

有時,是的 - 但僅限於小東西是驚人不太可能拋出異常......或者失敗代表一個災難性場景的應用程序是根本無法使用。

請注意,您引用的所有內容都是真實的任意靜態初始化 - 不僅僅是靜態構造函數。所以如果你有:

private static readonly List<int> SomeValues = new List<int> { 1, 2, 3 }; 

然後,仍然受到相同的限制。基本上,如果類型初始化失敗,則類型不可用。這實在不應該讓人吃驚,但這並不意味着它沒用。

0

由於static constructor被調用時,在類型在第一次訪問的精確時刻只有一次,它可能成爲有用的程序在運行過程中跟蹤這些信息。

0

你仍然使用靜態構造函數來編程構造嗎?

是的。但是靜態構造函數從不應該拋出一個異常,我們不應該責怪靜態構造函數...

When not use static constructor 

真的要花很多的初始化,我會使用一個懶惰的屬性。

0

有時你必須使用它,如果你想以一個複雜的方式初始化靜態成員。

當然,如果你寫一個複雜的代碼,你可能會得到一些例外,比如文件不存在,網絡無法工作。但是,如果你真的知道自己在做什麼,就可以做到。

所以問題不在於你是否應該使用靜態構造函數,這是由於你如何設計你的軟件?爲什麼使用具有複雜初始化需求的靜態對象?如果你只想擁有一個全局唯一對象,你可以考慮Singleton模式。