前言第 1 章 處理資料型別作法 01 使用屬性取代可存取的資料成員 作法 02 可變動的資料優先使用隱藏屬性作法 03 實值型別優先使其具不可變性 作法 04 區分實值與參考型別 作法 05 確保 0 是實值型別的有效狀態 作法 06 確保屬性運作如資料一般 作法 07 使用 Tuples 限制型別的範圍 作法 08 在匿名型別上定義區域函式 作法 09 了解多種相等概念之間的關係 作法 10 了解 GetHashCode() 的陷阱 第 2 章 API 設計作法 11 在你的 API 中避免轉換運算子作法 12 使用選擇性引數減少方法的多載作法 13 限制型別的可見性 作法 14 優先定義並實作介面進行繼承 作法 15 了解介面與 Virtual Method 之間差異 作法 16 為通知實作事件模式 作法 17 避免傳回內部類別物件的參考作法 18 優先使用 Override 替代 Event Handler 作法 19 避免在基底類別中定義方法多載 作法 20 了解事件如何增進物件之間執行期的耦合 作法 21 只宣告 Nonvirtual Event 作法 22 建立清楚的、最少的,以及完整的方法群作法 23 部分類別的建構函式、更動子與 Event handler 使用部分方法 作法 24 避免使用 ICloneable,因為它限制你的設計選擇作法 25 Array 引數限制只使用 params 陣列 作法 26 在 Iterators 與 Async 方法中使用區域函式啟動立即錯誤回報第 3 章 以Task 為基礎的非同步程式設計作法 27 非同步工作使用 Async 方法作法 28 永遠不要寫 async void 方法 作法 29 避免結合同步與非同步方法 作法 30 避免執行緒配置及 Context Switches 作法 31 避免非必要的封送處理(Marshalling)Context 作法 32 使用 Task 物件合成非同步工作 作法 33 考慮實作 Task 取消協定(Task Cancellation Protocol) 作法 34 緩衝擴充的非同步回傳值第 4 章 平行處理作法 35 學習 PLINQ 如何實作平行演算法 作法 36 建構有考慮例外情況的平行演算法 作法 37 使用執行緒區集取代建立執行緒 作法 38 使用 BackgroundWorker 做跨執行緒通訊 作法 39 了解 XAML 環境中的跨執行緒呼叫作法 40 使用 lock() 作為同步處理的首選 作法 41 鎖定 Handles 使用最小可能的範圍 作法 42 避免在鎖定的區段呼叫不明的程式碼 第 5 章 動態程式設計作法 43 了解動態程式設計的利弊 作法 44 透過動態型別運用泛型引數執行期的型別 作法 45 資料驅動(Data-Driven)動態型別使用 DynamicObject 或IDynamicMetaObjectProvider作法 46 了解如何運用 Expression API 作法 47 在公開的 API 中減少動態物件的使用 第 6 章 參與全球C# 社群作法 48 尋求最好的答案,而不是最受歡迎的答案 作法 49 參與規格及程式碼的訂定作法 50 考慮用分析器自動化慣用法