第1章 概述 1
1.1 精心設計的框架所具備的品質 2
1.1.1 精心設計的框架是簡單的 2
1.1.2 精心設計的框架設計代價高 3
1.1.3 精心設計的框架充滿利弊權衡 3
1.1.4 精心設計的框架應該藉鑒過去 4
1.1.5 精心設計的框架要考慮未來發展 4
1.1.6 精心設計的框架應具有良好的集成性 4
1.1.7 精心設計的框架是一緻的 4
第2章 框架設計基礎 6
2.1 漸進框架 7
2.2 框架設計的基本原則 10
2.2.1 場景驅動設計的原則 11
2.2.2 低門檻原則 17
2.2.3 自說明對象模型原則 20
2.2.4 分層架構原則 25
2.3 小結 27
第3章 命名規範 28
3.1 大小寫約定 29
3.1.1 標識符的大小寫規則 29
.3.1.2 首字母縮寫詞的大小寫 31
3.1.3 復閤詞和常用術語的大小寫 33
3.1.4 是否區分大小寫 35
3.2 通用命名約定 35
3.2.1 單詞的選擇 36
3.2.2 使用單詞縮寫和首字母縮寫詞 37
3.2.3 避免使用語言特有的名字 38
3.2.4 為已有api的新版本命名 39
3.3 程序集和dll的命名 42
3.4 名字空間的命名 43
3.5 類、結構和接口的命名 47
3.5.1 泛型類型參數的命名 49
3.5.2 常用類型的命名 50
3.5.3 枚舉類型的命名 51
3.6 類型成員的命名 53
3.6.1 方法的命名 53
3.6.2 屬性的命名 54
3.6.3 事件的命名 55
3.6.4 字段的命名 57
3.7 參數的命名 57
3.8 資源的命名 58
3.9 小結 59
第4章 類型設計規範 60
4.1 類型和名字空間 62
4.2 類和結構之間的選擇 67
4.3 類和接口之間的選擇 69
4.4 抽象類的設計 76
4.5 靜態類的設計 78
4.6 接口的設計 79
4.7 結構的設計 81
4.8 枚舉的設計 83
4.8.1 標記枚舉的設計 89
4.8.2 給枚舉添加值 93
4.9 嵌套類型 94
4.10 小結 96
第5章 成員設計 97
5.1 成員設計的一般規範 97
5.1.1 成員重載 97
5.1.2 顯式地實現接口成員 102
5.1.3 屬性和方法之間的選擇 106
5.2 屬性的設計 112
5.2.1 索引屬性的設計 113
5.2.2 屬性改變的通知事件 115
5.3 構造函數的設計 117
5.4 事件的設計 123
5.5 字段的設計 130
5.6 操作符重載 132
5.6.1 重載operator== 136
5.6.2 類型轉換操作符 136
5.7 參數的設計 138
5.7.1 枚舉和布爾參數之間的選擇 140
5.7.2 參數的驗證 142
5.7.3 參數的傳遞 145
5.7.4 參數數量可變的成員 147
5.7.5 指針參數 150
5.8 小結 152
第6章 為擴展性而設計 153
6.1 擴展機製 153
6.1.1 非密封類 153
6.1.2 保護成員 155
6.1.3 事件與迴調函數 156
6.1.4 虛成員 158
6.1.5 抽象(抽象類型與抽象接口) 160
6.2 基類 162
6.3 密封 163
6.4 小結 166
第7章 異常 167
7.1 拋齣異常 171
7.2 為拋齣的異常選擇閤適的類型 175
7.2.1 錯誤消息的設計 176
7.2.2 異常處理 177
7.2.3 對異常進行封裝 182
7.3 標準異常類型的使用 184
7.3.1 exception與systemexception 184
7.3.2 applicationexception 184
7.3.3 invalidoperationexception 184
7.3.4 argumentexception、argumentnullexception 及argumentoutofrangeexception 185
7.3.5 nullreferenceexception、indexoutofrangeexception及accessviolationexception 186
7.3.6 stackoverflowexception 186
7.3.7 outofmemoryexception 187
7.3.8 comexception、sehexception及其他clr異常 188
7.3.9 executionengineexception 188
7.4 自定義異常的設計 188
7.5 異常與性能 190
7.5.1 tester-doer模式 190
7.5.2 try-parse模式 191
7.6 小結 192
第8章 使用規範 193
8.1 數組 193
8.2 attribute 195
8.3 集閤 198
8.3.1 集閤參數 199
8.3.2 集閤屬性與返迴值 200
8.3.3 數組與集閤之間的選擇 204
8.3.4 自定義集閤的實現 205
8.4 icloneable 207
8.5 icomparable[t]與iequatable[t] 208
8.6 idisposable 210
8.7 對象 210
8.7.1 object.equals 210
8.7.2 object.gethashcode 212
8.7.3 object.tostring 213
8.8 uri 214
8.9 system.xml的使用 216
8.10 相等性操作符 218
8.10.1 值類型的相等性操作符 218
8.10.2 引用類型的相等性操作符 219
第9章 常用的設計模式 220
9.1 聚閤組件 220
9.1.1 麵嚮組件的設計 222
9.1.2 因子類型 224
9.1.3 聚閤組件規範 224
9.2 async模式 227
9.3 dispose模式 232
9.3.1 基本dispose模式 234
9.3.2 可終結類型 240
9.4 factory模式 243
9.5 optional feature模式 247
9.6 template method模式 251
9.7 超時 252
9.8 結束語 254
附錄a c#編程風格約定 255
a.1 通用風格約定 255
a.1.1 花括號的使用 255
a.1.2 空格的使用 257
a.1.3 縮進的使用 259
a.2 命名約定 259
a.3 注釋 260
a.4 文件的組織 261
附錄b 通過fxcop來實施設計規範 263
b.1 fxcop是什麼? 263
b.2 fxcop的發展過程 264
b.3 fxcop的工作原理 265
b.4 fxcop規範的覆蓋範圍 265
b.4.1 與命名規範有關的fxcop規則 265
b.4.2 與類型設計規範有關的fxcop規則 274
b.4.3 與成員的設計有關的fxcop規則 277
b.4.4 與為擴展性而設計有關的fxcop規則 284
b.4.5 與異常有關的fxcop規則 285
b.4.6 與使用規範有關的fxcop規則 287
b.4.7 與設計模式有關的fxcop規則 291
附錄c api規範樣例 292
術語錶 299
推薦讀物 303
索引 305
· · · · · · (
收起)