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()。