 |
-- 會員 / 註冊 --
|
|
|
|
更鋒利的C#代碼--編寫高質量C#程式 ( 簡體 字) |
作者:包善東 | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 16005 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:10/1/2008 |
頁數:326 |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 | ISBN:9787302179429 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:一個好的程序,不僅僅是能得出正確的運行結果,而且還應在其內部保持清晰的代碼邏輯和語義,否則,跟隨在正常結果之后的也許是艱難的代碼維護工作,對程序進行一處修改往往會牽一發而動全身,一不小心就會埋下深深的隱患。從另一個角度來說,如果每一行代碼的質量都很高,那么這個軟件產品也一定是高質量的。這就像ISO 9000的質量體系認證一樣,與其在產品生產完成之后再進行檢驗,不如控制每一步生產環節的質量。 本書由淺入深、由表及里地講述存在于C# 編碼開發中的各種質量問題,讓讀者清楚地了解什么是應該做的,什么是不應該做的。C# 提供的每種語言機制的功能背后,體現了怎樣的邏輯含義。當遇到具體的問題時,應該如何選擇與取舍。閱讀完此書的每一個章節,都會讓讀者站在更高的角度對C# 體系擁有更深的認識和把握,不斷向軟件開發的更高層次邁進。 |
目錄:第1章 基本的代碼風格 1.1 換行的講究 1 1.1.1 尋找最佳的斷行位置 2 1.1.2 每行只寫一條語句 4 1.1.3 分行定義變量 4 1.2 避免代碼過于擁擠 5 1.2.1 使用空行分隔代碼塊 5 1.2.2 使用空格降低代碼密度 8 1.3 如何縮進 10 1.3.1 嵌套或包含關系引起的縮進 11 1.3.2 因換行而產生的縮進 14 1.3.3 使用空格還是Tab鍵 15 1.4 大括號 15 1.4.1 大括號的位置 16 1.4.2 空的大括號結構 17 1.4.3 僅包含單個語句的結構體 19 1.5 保持項目文件的條理性 21 1.5.1 解決方案的結構呼應 21 1.5.2 代碼文件的結構 22 1.5.3 使用#region標記來隱藏細節 24 第2章 養成良好的注釋習慣 2.1 何時需要注釋 25 2.1.1 解釋代碼的意圖 26 2.1.2 對局部變量的說明 26 2.1.3 充當代碼標題 27 2.1.4 指出例外情況 30 2.1.5 開發過程的提示 30 2.2 注釋的格式 31 2.2.1 單行注釋 32 2.2.2 多行注釋 33 2.3 正確使用XML文檔注釋 34 2.3.1 結構與類的XML文檔注釋 36 2.3.2 屬性的XML文檔注釋 37 2.3.3 方法的XML文檔注釋 38 2.3.4 構造函數的XML文檔注釋 39 2.3.5 事件的XML文檔注釋 40 2.3.6 枚舉類型的XML文檔注釋 41 2.3.7 泛型的XML文檔注釋 42 2.3.8 其他標記 43 第3章 一般命名規范 3.1 選用合適的名稱 45 3.1.1 使用字符的限制 46 3.1.2 使用含義明確的英語 47 3.2 大小寫規則 49 3.2.1 Pascal規則 49 3.2.2 Camel規則 49 3.2.3 首字母縮寫詞與簡寫詞 50 3.2.4 應在何時使用何種大小寫規則 52 3.3 考慮跨語言編程 54 3.3.1 不要通過大小寫區分標識符 54 3.3.2 避免與其他語言的關鍵字重復 55 3.3.3 避免使用特定語言的術語 55 3.4 命名一致與沖突 57 3.4.1 大小寫無關原則 57 3.4.2 對基類型的命名暗示 58 3.4.3 對參數與屬性的關系暗示 60 3.4.4 屬性名稱與自身類型同名 62 3.4.5 與命名空間相關的命名沖突 63 3.5 匈牙利命名法 65 3.5.1 匈牙利命名法的弊端 66 3.5.2 考慮為控件應用匈牙利命名法 67 第4章 處理數據 4.1 關于數據類型 69 4.1.1 整數 69 4.1.2 浮點數 71 4.1.3 布爾類型 74 4.1.4 字符與字符串 74 4.2 變量的使用 77 4.2.1 盡可能使用內置關鍵字 77 4.2.2 初始化一切變量 78 4.2.3 集中使用變量 79 4.3 使用枚舉 83 4.3.1 何時使用枚舉 84 4.3.2 如何為枚舉命名 87 4.3.3 關于枚舉項 89 4.3.4 標記枚舉 90 4.4 魔數——以字面數值出現在代碼中的常量 92 4.5 復雜的表達式 93 4.5.1 運算符的副作用 94 4.5.2 簡化表達式 95 第5章 分支結構 5.1 使用if結構 98 5.1.1 “==”與“=”的問題 98 5.1.2 如何處理復雜的條件 100 5.2 使用switch結構 103 5.2.1 break語句 103 5.2.2 使用default子句要注意的問題 105 5.3 選擇if還是switch? 107 5.4 關于判斷順序的設計 109 5.4.1 先判斷最有可能成立的條件 110 5.4.2 預防因條件短路而丟失操作 113 5.5 慎用goto語句 114 第6章 循環結構 6.1 使用for還是while 117 6.1.1 for和while的語義比較 117 6.1.2 簡單的數值迭代——for和while的思維模式的差異 118 6.1.3 預知循環次數——微波爐加熱的啟示 121 6.1.4 集合迭代——獨特的foreach結構 122 6.2 循環變量的使用 123 6.2.1 循環變量的命名 123 6.2.2 循環變量的定義 124 6.2.3 避免循環變量的非常規應用 125 6.3 提高循環效率 127 6.3.1 避免不必要的重復勞動 127 6.3.2 避免不必要的循環 127 第7章 如何使用函數 7.1 為什么要使用函數 129 7.1.1 函數與方法 129 7.1.2 代碼復用 130 7.1.3 隱藏細節——使用函數進行抽象 132 7.2 函數重載 135 7.2.1 重載的語義——為調用者提供方便 135 7.2.2 保持核心代碼唯一 139 7.3 參數的設計 142 7.3.1 參數的命名 142 7.3.2 不要使用保留項 142 7.3.3 何時使用變長參數列表 143 7.3.4 何時使用ref參數和out參數 145 7.3.5 參數的順序 146 7.3.6 重載函數的參數一致性體現 146 7.4 參數檢查的必要性 150 7.4.1 檢查零值及空引用 150 7.4.2 檢查枚舉類型 151 7.4.3 防止數據被篡改 152 7.4.4 在何處檢查合法性 153 7.5 函數的出口——離開函數的三種方式 154 7.5.1 返回值的用法 155 7.5.2 離開函數的時機 156 第8章 結構與類 8.1 結構與類的比較 159 8.1.1 值類型與引用類型 159 8.1.2 何時應當使用結構 160 8.1.3 何時應當使用類 160 8.2 結構與類的命名 161 8.2.1 措辭 161 8.2.2 避免與命名空間沖突 161 8.2.3 不要使用“C”前綴 162 8.2.4 后綴的使用 162 8.3 如何搭建一個典型的結構 164 8.3.1 找準核心數據 164 8.3.2 數據的表現形式 165 8.3.3 定義等價原則 166 8.3.4 實現基本運算 168 8.4 如何真正面向對象 169 第9章 封裝 9.1 構造函數 175 9.1.1 構造函數的語義 175 9.1.2 何時使用靜態構造方法 177 9.1.3 構造函數的參數及其初始化 178 9.2 Finalize函數 181 9.2.1 垃圾回收器 181 9.2.2 IDisposable接口——顯式釋放資源的方法 181 9.2.3 釋放資源的一般范式 184 9.3 何時應該使用字段 185 9.3.1 存儲核心數據 186 9.3.2 維持中間結果 187 9.3.3 常量字段 188 9.4 如何使用字段 189 9.4.1 字段的命名 189 9.4.2 訪問控制 190 9.5 何時應該使用屬性 192 9.5.1 屬性的語義 192 9.5.2 數據訪問控制 193 9.5.3 需要的后續操作 194 9.5.4 簡單的數據處理 194 9.5.5 預定義的對象實例 195 9.6 如何使用屬性 195 9.6.1 屬性的命名 195 9.6.2 訪問控制 198 9.6.3 提供合理的默認值 199 9.6.4 保持輕量級的操作 199 9.6.5 在屬性中拋出異常 199 9.7 何時應該使用方法 200 9.7.1 表示某種操作 200 9.7.2 耗時的任務——方法在形式上的暗示作用 201 9.7.3 有副作用的操作 202 9.7.4 返回不確定的值 203 9.7.5 返回數組或集合對象 203 9.8 如何使用方法 205 9.8.1 方法的命名 206 9.8.2 檢查傳入的參數 206 9.9 靜態類型及成員 206 9.10 嵌套類型及其適用場合 206 9.11 可變類型的安全性 208 9.12 使用程序集與命名空間 210 9.12.1 程序集的劃分 210 9.12.2 為什么要使用命名空間 210 9.12.3 命名空間的命名 211 9.12.4 命名空間的管理 212 第10章 繼承與多態 10.1 如何利用類繼承 214 10.1.1 自上而下逐步細化 214 10.1.2 自下而上逐步抽象 217 10.2 繼承限制 222 10.2.1 強制繼承的抽象類型 222 10.2.2 密封類型 222 10.2.3 擴展方法——直接向已有類型添加功能 223 10.3 關于接口 224 10.3.1 接口的語義 224 10.3.2 接口的命名 225 10.3.3 使用接口還是類繼承 225 10.4 何時應當顯式實現接口 227 10.4.1 解決接口之間的命名沖突 227 10.4.2 提供強類型操作 228 10.4.3 隱藏僅用于通過接口訪問的成員 229 10.5 使用多態 230 10.5.1 何時應進行重寫 230 10.5.2 應當重寫哪個成員 230 10.5.3 保持參數名稱一致 233 10.6 運算符重載 233 10.6.1 可重載的運算符 233 10.6.2 符合運算符的本意 235 10.6.3 運算符的關聯性 235 10.6.4 類型轉換運算符的重載 236 第11章 泛型機制 11.1 裝箱與取消裝箱 237 11.2 何時使用泛型 238 11.3 泛型的類型參數設計 239 11.3.1 類型參數的命名 239 11.3.2 使用類型參數的時機 241 第12章 事件與委托 12.1 何為事件驅動模式 244 12.2 如何響應事件 245 12.2.1 事件處理函數 246 12.2.2 代碼的分配 248 12.2.3 事件偵聽器的使用 250 12.3 如何提供事件 255 12.3.1 何時應當提供事件 256 12.3.2 事件的命名 256 12.3.3 傳遞與事件相關的數據 257 12.3.4 用于事件的委托及其要遵守的約定 259 12.3.5 觸發事件 260 12.4 使用委托 261 12.4.1 何時使用委托 261 12.4.2 何時使用匿名方法 261 12.4.3 基類型與派生類型 263 第13章 集合類型 13.1 系統內置集合類型 264 13.1.1 數組 264 13.1.2 列表 266 13.1.3 字典 266 13.1.4 其他類型 267 13.2 選用適當的集合類型要考慮的幾個方面 267 13.2.1 容量 267 13.2.2 進出次序 268 13.2.3 定位的問題——索引/鍵訪問 268 13.2.4 元素結構 269 13.2.5 排序 271 13.3 性能比較 272 13.4 提供自己的集合類型 274 13.4.1 何時應提供集合類型 274 13.4.2 集合類型的命名 276 13.4.3 提供與內置集合類型一致的行為 276 13.4.4 索引器及其應遵守的規則 278 13.4.5 迭代器 279 第14章 LINQ查詢 14.1 提高LINQ查詢的效率 282 14.1.1 查詢語法和方法語法的區別 282 14.1.2 LINQ查詢的創建、執行與性能 284 14.1.3 減少返回的數據量 285 14.2 LINQ中的錯誤處理——采用防御式編程 286 14.3 LINQ查詢的相關機制 288 14.3.1 匿名類型 288 14.3.2 隱式類型的局部變量 289 14.3.3 Lambda表達式與匿名函數 290 第15章 異常 15.1 處理異常時應遵守的規范 292 15.2 拋出異常 296 15.2.1 異常的語義 296 15.2.2 不應使用異常的位置 298 15.2.3 控制異常 298 15.2.4 異常的重新拋出——重新包裝時要注意的 300 15.3 選用合適的異常類型 303 15.3.1 常見的異常類型 303 15.3.2 不應使用的異常類型 304 15.4 異常提示信息 305 15.5 設計自定義異常及應遵循的約定 305 第16章 全球化與本地化 16.1 分離與特定區域相關的信息 309 16.2 處理特定區域性的數據 312 16.2.1 區分區域性與界面區域性 312 16.2.2 在內部使用Unicode 312 16.2.3 文本的比較與排序 313 16.2.4 不要假定區域性的行為 315 16.3 何時使用固定區域性 316 16.4 用戶界面應注意的細節 316 16.4.1 使用資源 317 16.4.2 術語 318 16.4.3 界面布局 318 16.4.4 歧義 320 16.4.5 組合文本 320 附錄A:C#、VB.NET、J# 關鍵字表 323 附錄B:常用的異常類型 325 |
序: |
|