Effective C# 摘錄(2) - .NET資源管理

12:變量聲明時初始化優於賦值語句。
   Prefer Variable Initializers to Assignment Statements。
   若類的實例變量成員在聲明時初始化,初始化代碼會內聯到該類的每個實例構造函數中:構造對象實例時,先執行初始化代碼,再調用基類構造函數,最後執行構造函數中代碼。
   當構造函數有多個重載版本時,建議在定義字段時避免進行初始化,而應該將這些公共的初始化語句放在一個構造函數中,然後使其他的構造器顯示地調用這個初始化構造函數。  

13:使用靜態構造器初始化靜態類成員。
   Initialize Static Class Members with Static Constructors.
   若類中的靜態變量成員在聲明時初始化,初始化代碼會內聯到類的靜態構造函數中:運行時,先執行初始化代碼,再執行靜態構造函數中的代碼。建議:簡單靜態成員可以直接在聲明時初始化,而可能產生異常的初始化則應放在靜態構造函數中初始化。

14:利用構造器鏈。
   Utilize Constructor Chaining.
   只能使用this(args)(構造器鏈中的最後一個構造函數中調用Base))和base(args)中一個,不能同時使用。

15:利用using和try/finally語句來清理資源。
   Utilize using and Try/finally for Resource Cleanup.
   using所使用的對象必須繼承IDisposable,且不支持運行時類型檢查(可用as轉換,但可能會隱藏bug,一般確保每一個實現了IDispose接口的對象分配在在using範圍內)。

16:儘量減少內存垃圾。
   Minimize Garbage.
   使用類成員而代替每個函數中都用到的局部變量;使用Singleton模式來實現公用對象或將其實現爲對象池。

17:儘量減少裝箱與拆箱。
   Minimize Boxing and Unboxing。
   防止隱式裝箱。eg:Console.WriteLine( "Number list:{0}, {1}, {2}",1,2,3 );=>Console.WriteLine( "Number list:{0}, {1}, {2}",1.ToString(),2.ToString(),3.ToString() );

18:實現標準Dispose模式。
   Implement the Standard Dispose Pattern.
   Dispose()應做的工作:釋放所有非託管資源;釋放所有託管資源,這包括取消事件綁定;設置標誌位,標明對象已經釋放;調用“GC.SuppressFinalize(this)”來避免GC再去掉用對象的析構函數。
   如果父類和子類都使用了非託管資源,則子類在重載父類的Dispose()函數中,要記得顯式調用父類的Dispose()。
    

發佈了58 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章