Effective C# : 改善 C# 代碼的 50個有效方法 (原書第3版) Effective C#:改善C#代码的50个有效方法(原书第3版)

比爾·瓦格納 (Bill Wagner)

買這商品的人也買了...

商品描述

本書分為5個章節,第1章介紹一些常見的語言結構,它們是開發者手頭必備的工具,無論創建什麽樣的類型與算法,都離不開它們;第2章介紹一些設計習慣,告訴你應該怎樣把代碼寫得與托管環境相協調;第3章講解怎樣用泛型取代System.Object以及強制類型轉換,並討論一些高級技術,如約束、泛型特化、方法約束以及向後兼容等;第4章講解LINQ、查詢語法以及與之相關的語言特性,包括什麽時候運用擴展方法把協定與實現相分離、怎樣有效地使用閉包以及如何編寫匿名類型等;第5章指引你把C#程序中的異常與錯誤處理好。

作者簡介

Bill Wagner,世界知名的C#專家,也是ECMA C#標準委員會成員。
他在Humanitarian Toolbox項目中擔任主管,
並榮獲微軟公司.NET MVP稱號長達11年,
最近開始在.NET Foundation AdvisoryCouncil任職。
Wagner在工作中與各種規模的公司合作,
幫助這些創業公司或企業改進軟件開發流程,並培養軟件開發團隊。
目前,他是微軟.NET核心內容團隊的員工,
寫過很多與C#語言及.NET框架有關的學習資料。
他擁有伊利諾伊大學厄巴納-尚佩恩分校計算機科學專業的學士學位。
比爾·瓦格納(Bill Wagner),世界知名的C#專家,
也是ECMA C#標準委員會成員。
他在Humanitarian Toolbox項目中擔任主管,
並榮獲微軟公司.NET MVP稱號長達11年,
最近開始在.NET Foundation AdvisoryCouncil任職。
Wagner在工作中與各種規模的公司合作,
幫助這些創業公司或企業改進軟件開發流程,並培養軟件開發團隊。
目前,他是微軟.NET核心內容團隊的員工,
寫過很多與C#語言及.NET框架有關的學習資料。
他擁有伊利諾伊大學厄巴納-尚佩恩分校計算機科學專業的學士學位。

目錄大綱

Contents目錄
本書讚譽
譯者序
前言
第1章C#語言的編程習慣1 
第1條:優先使用隱式類型的局部變量1 
第2條:考慮用readonly代替const8 
第3條:優先考慮is或as運算符,盡量少用強制類型轉換12 
第4條:用內插字符串取代string.Format()20 
第5條:用FormattableString取代專門為特定區域而寫的字符串24 
第6條:不要用表示符號名稱的硬字符串來調用API26 
第7條:用委託表示回調28 
第8條:用null條件運算符調用事件處理程序31 
第9條:盡量避免裝箱與取消裝箱這兩種操作34 
第10條:只有在應對新版基類與現有子類之間的衝突時才應該使用new修飾符38 
第2章.NET的資源管理42 
第11條:理解並善用.NET的資源管理機制42 
第12條:聲明字段時,盡量直接為其設定初始值47 
第13條:用適當的方式初始化類中的靜態成員50 
第14條:盡量刪減重複的初始化邏輯52 
第15條:不要創建無謂的對象60 
第16條:絕對不 在構造函數里面調用虛函數64 
第17條:實現標準的dispose模式67 
第3章合理地運用泛型74 
第18條:只定義剛好夠用的約束條件76
第19條:通過運行期類型檢查實現特定的泛型算法82 
第20條:通過IComparable<T>及IComparer<T>定義順序關係88 
第21條:創建泛型類時,總是應該給實現了IDisposable的類型參數提供支持95 
第22條:考慮支持泛型協變與逆變98 
第23條:用委託要求類型參數必須
提供某種方法104 
第24條:如果有泛型方法,就不要
再創建針對基類或接口的
重載版本110 
第25條:如果不需要把類型參數所
表示的對象設為實例字段,
那麼應該優先考慮創建泛
型方法,而不是泛型類114 
第26條:實現泛型接口的同時,還
應該實現非泛型接口118 
第27條:只把必備的契約定義在接
口中,把其他功能留給擴
展方法去實現124 
第28條:考慮通過擴展方法增強已
構造類型的功能128 
第4章合理地運用LINQ131 
第29條:優先考慮提供迭代器方法,
而不要返回集合131 
第30條:優先考慮通過查詢語句來
編寫代碼,而 要使用循環
語句137 
第31條:把針對序列的API設計得
更加易於拼接142 
第32條:將迭代邏輯與操作、謂詞
及函數解耦149 
第33條:等真正用到序列中的元素
時再去生成153 
第34條:考慮通過函數參數來放鬆
耦合關係155 
第35條:絕對不要重載擴展方法162 
第36條:理解查詢表達式與方法調
用之間的映射關係165 
第37條:盡量採用惰性求值的方式
來查詢,而不要及早求值177 
第38條:考慮用lambda表達式來
代替方法182 
第39條:不要在Func與Action中
拋出異常186 
第40條:掌握儘早執行與延遲執行
之間的區別188 
第41條:不要把開銷較大的資源捕
獲到閉包中193 
第42條:注意IEnumerable與
IQueryable形式的數據
源之間的區別206 
第43條:用Single()及First() 
來明確地驗證你對查詢結果
所做的假設211 
第44條:不要修改綁定變量214 
第5章合理地運用異常220 
第45條:考慮在方法約定遭到違背
時拋出異常220 
第46條:利用using與try/finally 
來清理資源224 
第47條:專門針對應用程序創建異常231
第48條:優先考慮做出強異常保證237 
第49條:考慮用異常篩選器來改寫
先捕獲異常再重新拋出的
邏輯244 
第50條:合理利用異常篩選器的副
作用來實現某些效果248 
中英文詞彙對照表252