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