出版時(shí)間:2011-10 出版社:機(jī)械工業(yè)出版社 作者:陸敏技 頁(yè)數(shù):347
Tag標(biāo)簽:無(wú)
內(nèi)容概要
本書(shū)是C#程序員進(jìn)階修煉的必讀之作,包含的全部都是C#編碼的最佳實(shí)踐,從語(yǔ)言本身、程序的設(shè)計(jì)和架構(gòu)、編碼規(guī)范和編程習(xí)慣等三大方面對(duì)C#程序員遇到的經(jīng)典問(wèn)題給出了經(jīng)驗(yàn)性的解決方案,為C#程序員如何編寫(xiě)更高質(zhì)量的C#代碼提供了157條極為寶貴的建議。對(duì)于每一個(gè)問(wèn)題,不僅以建議的方式給出了被實(shí)踐證明為十分優(yōu)秀的解決方案,而且還給出了經(jīng)常被誤用或被錯(cuò)誤理解的不好的解決方案,從正反兩個(gè)方面進(jìn)行了分析和對(duì)比。
全書(shū)一共三個(gè)部分,第一部分專(zhuān)注于C#語(yǔ)言本身,一共89條建議,涵蓋了C#語(yǔ)言基本要素、集合、LINQ、泛型、委托、事件、資源管理、序列化、異常處理、異步、多線(xiàn)程、任務(wù)和并行編程等與C#語(yǔ)法相關(guān)的核心內(nèi)容;第二部分重點(diǎn)講解了C#程序的設(shè)計(jì)和架構(gòu),一共32條建議,涉及成員設(shè)計(jì)、面向?qū)ο蟮念?lèi)型設(shè)計(jì)、安全性設(shè)計(jì)等重要方面的內(nèi)容;第三部分探討了C#的編碼規(guī)范及編程習(xí)慣,一共36條建議,包含C#命名規(guī)范、如何使代碼更整潔以及如何規(guī)范開(kāi)發(fā)行為等方面的內(nèi)容。
本書(shū)是一本關(guān)于如何編寫(xiě)高質(zhì)量C#代碼的工具書(shū),列舉的問(wèn)題非常典型,給出的建議也非常實(shí)用,其中的每一條建議都有可能在我們編寫(xiě)下一行代碼的時(shí)候被用到。你可以將此書(shū)擱置在案頭,以便有需要的時(shí)候隨時(shí)查閱。
作者簡(jiǎn)介
陸敏技,資深軟件工程師、項(xiàng)目經(jīng)理和架構(gòu)師,從事軟件開(kāi)發(fā)工作近10年。尤其精通微軟技術(shù),對(duì)C#、WPF、WCF、ASP.NET和.NET技術(shù)有十分深入的研究,曾參與和主導(dǎo)了大量的相關(guān)項(xiàng)目的架構(gòu)和開(kāi)發(fā)工作,積累了豐富的經(jīng)驗(yàn)。此外,他還非常擅長(zhǎng)于分布式開(kāi)發(fā)技術(shù),而且有豐富的培訓(xùn)和授課經(jīng)驗(yàn)?;钴S于博客園等技術(shù)社區(qū),樂(lè)于分享,有較高的知名度和社區(qū)影響力。
書(shū)籍目錄
前言
第一部分 語(yǔ)言篇
第1章 基本語(yǔ)言要素
建議1:正確操作字符串
建議2:使用默認(rèn)轉(zhuǎn)型方法
建議3:區(qū)別對(duì)待強(qiáng)制轉(zhuǎn)型與as和is
建議4:TryParse比Parse好
建議5:使用int?來(lái)確保值類(lèi)型也可以為null
建議6:區(qū)別readonly和const的使用方法
建議7:將0值作為枚舉的默認(rèn)值
建議8:避免給枚舉類(lèi)型的元素提供顯式的值
建議9:習(xí)慣重載運(yùn)算符
建議10:創(chuàng)建對(duì)象時(shí)需要考慮是否實(shí)現(xiàn)比較器
建議11:區(qū)別對(duì)待==和Equals
建議12:重寫(xiě)Equals時(shí)也要重寫(xiě)GetHashCode
建議13:為類(lèi)型輸出格式化字符串
建議14:正確實(shí)現(xiàn)淺拷貝和深拷貝
建議15:使用dynamic來(lái)簡(jiǎn)化反射實(shí)現(xiàn)
第2章 集合和LINQ
建議16:元素?cái)?shù)量可變的情況下不應(yīng)使用數(shù)組
建議17:多數(shù)情況下使用foreach進(jìn)行循環(huán)遍歷
建議18:foreach不能代替for
建議19:使用更有效的對(duì)象和集合初始化
建議20:使用泛型集合代替非泛型集合
建議21:選擇正確的集合
建議22:確保集合的線(xiàn)程安全
建議23:避免將List作為自定義集合類(lèi)的基類(lèi)
建議24:迭代器應(yīng)該是只讀的
建議25:謹(jǐn)慎集合屬性的可寫(xiě)操作
建議26:使用匿名類(lèi)型存儲(chǔ)LINQ查詢(xún)結(jié)果
建議27:在查詢(xún)中使用Lambda表達(dá)式
建議28:理解延遲求值和主動(dòng)求值之間的區(qū)別
建議29:區(qū)別LINQ查詢(xún)中的IEnumerable和IQueryable
建議30:使用LINQ取代集合中的比較器和迭代器
建議31:在LINQ查詢(xún)中避免不必要的迭代
第3章 泛型、委托和事件
建議32:總是優(yōu)先考慮泛型
建議33:避免在泛型類(lèi)型中聲明靜態(tài)成員
建議34:為泛型參數(shù)設(shè)定約束
建議35:使用default為泛型類(lèi)型變量指定初始值
建議36:使用FCL中的委托聲明
建議37:使用Lambda表達(dá)式代替方法和匿名方法
建議38:小心閉包中的陷阱
建議39:了解委托的實(shí)質(zhì)
建議40:使用event關(guān)鍵字為委托施加保護(hù)
建議41:實(shí)現(xiàn)標(biāo)準(zhǔn)的事件模型
建議42:使用泛型參數(shù)兼容泛型接口的不可變性
建議43:讓接口中的泛型參數(shù)支持協(xié)變
建議44:理解委托中的協(xié)變
建議45:為泛型類(lèi)型參數(shù)指定逆變
第4章 資源管理和序列化
建議46:顯式釋放資源需繼承接口IDisposable
建議47:即使提供了顯式釋放方法,也應(yīng)該在終結(jié)器中提供隱式清理
建議48:Dispose方法應(yīng)允許被多次調(diào)用
建議49:在Dispose模式中應(yīng)提取一個(gè)受保護(hù)的虛方法
建議50:在Dispose模式中應(yīng)區(qū)別對(duì)待托管資源和非托管資源
建議51:具有可釋放字段的類(lèi)型或擁有本機(jī)資源的類(lèi)型應(yīng)該是可釋放的
建議52:及時(shí)釋放資源
建議53:必要時(shí)應(yīng)將不再使用的對(duì)象引用賦值為null
建議54:為無(wú)用字段標(biāo)注不可序列化
建議55:利用定制特性減少可序列化的字段
建議56:使用繼承ISerializable接口更靈活地控制序列化過(guò)程
建議57:實(shí)現(xiàn)ISerializable的子類(lèi)型應(yīng)負(fù)責(zé)父類(lèi)的序列化
第5章 異常與自定義異常
建議58:用拋出異常代替返回錯(cuò)誤代碼
建議59:不要在不恰當(dāng)?shù)膱?chǎng)合下引發(fā)異常
建議60:重新引發(fā)異常時(shí)使用Inner Exception
建議61:避免在finally內(nèi)撰寫(xiě)無(wú)效代碼
建議62:避免嵌套異常
建議63:避免“吃掉”異常
建議64:為循環(huán)增加Tester-Doer模式而不是將try-catch置于循環(huán)內(nèi)
建議65:總是處理未捕獲的異常
建議66:正確捕獲多線(xiàn)程中的異常
建議67:慎用自定義異常
建議68:從System.Exception或其他常見(jiàn)的基本異常中派生異常
建議69:應(yīng)使用finally避免資源泄漏
建議70:避免在調(diào)用棧較低的位置記錄異常
第6章 異步、多線(xiàn)程、任務(wù)和并行
建議71:區(qū)分異步和多線(xiàn)程應(yīng)用場(chǎng)景
建議72:在線(xiàn)程同步中使用信號(hào)量
建議73:避免鎖定不恰當(dāng)?shù)耐綄?duì)象
建議74:警惕線(xiàn)程的IsBackground
建議75:警惕線(xiàn)程不會(huì)立即啟動(dòng)
建議76:警惕線(xiàn)程的優(yōu)先級(jí)
建議77:正確停止線(xiàn)程
建議78:應(yīng)避免線(xiàn)程數(shù)量過(guò)多
建議79:使用ThreadPool或BackgroundWorker代替Thread
建議80:用Task代替ThreadPool
建議81:使用Parallel簡(jiǎn)化同步狀態(tài)下Task的使用
建議82:Parallel簡(jiǎn)化但不等同于Task默認(rèn)行為
建議83:小心Parallel中的陷阱
建議84:使用PLINQ
建議85:Task中的異常處理
建議86:Parallel中的異常處理
建議87:區(qū)分WPF和WinForm的線(xiàn)程模型
建議88:并行并不總是速度更快
建議89:在并行方法體中謹(jǐn)慎使用鎖
第二部分 架構(gòu)篇
第7章 成員設(shè)計(jì)
建議90:不要為抽象類(lèi)提供公開(kāi)的構(gòu)造方法
建議91:可見(jiàn)字段應(yīng)該重構(gòu)為屬性
建議92:謹(jǐn)慎將數(shù)組或集合作為屬性
建議93:構(gòu)造方法應(yīng)初始化主要屬性和字段
建議94:區(qū)別對(duì)待override和new
建議95:避免在構(gòu)造方法中調(diào)用虛成員
建議96:成員應(yīng)優(yōu)先考慮公開(kāi)基類(lèi)型或接口
建議97:優(yōu)先考慮將基類(lèi)型或接口作為參數(shù)傳遞
建議98:用params減少重復(fù)參數(shù)
建議99:重寫(xiě)時(shí)不應(yīng)使用子類(lèi)參數(shù)
建議100:靜態(tài)方法和實(shí)例方法沒(méi)有區(qū)別
建議101:使用擴(kuò)展方法,向現(xiàn)有類(lèi)型“添加”方法
第8章 類(lèi)型設(shè)計(jì)
建議102:區(qū)分接口和抽象類(lèi)的應(yīng)用場(chǎng)合
建議103:區(qū)分組合和繼承的應(yīng)用場(chǎng)合
建議104:用多態(tài)代替條件語(yǔ)句
建議105:使用私有構(gòu)造函數(shù)強(qiáng)化單例
建議106:為靜態(tài)類(lèi)添加靜態(tài)構(gòu)造函數(shù)
建議107:區(qū)分靜態(tài)類(lèi)和單例
建議108:將類(lèi)型標(biāo)識(shí)為sealed
建議109:謹(jǐn)慎使用嵌套類(lèi)
建議110:用類(lèi)來(lái)代替enum
建議111:避免雙向耦合
建議112:將現(xiàn)實(shí)世界中的對(duì)象抽象為類(lèi),將可復(fù)用對(duì)象圈起來(lái)就是命名空間
第9章 安全性設(shè)計(jì)
建議113:聲明變量前考慮最大值
建議114:MD5不再安全
建議115:通過(guò)HASH來(lái)驗(yàn)證文件是否被篡改
建議116:避免用非對(duì)稱(chēng)算法加密文件
建議117:使用SSL確保通信中的數(shù)據(jù)安全
建議118:使用SecureString保存密鑰等機(jī)密字符串
建議119:不要使用自己的加密算法
建議120:為程序集指定強(qiáng)名稱(chēng)
建議121:為應(yīng)用程序設(shè)定運(yùn)行權(quán)限
第三部分 編碼規(guī)范及習(xí)慣
第10章 命名規(guī)范
建議122:以.為命名空間命名
建議123:程序集不必與命名空間同名
建議124:考慮在命名空間中使用復(fù)數(shù)
建議125:避免用FCL的類(lèi)型名稱(chēng)命名自己的類(lèi)型
建議126:用名詞和名詞組給類(lèi)型命名
建議127:用形容詞組給接口命名
建議128:考慮讓派生類(lèi)的名字以基類(lèi)名字作為后綴
建議129:泛型類(lèi)型參數(shù)要以T作為前綴
建議130:以復(fù)數(shù)命名枚舉類(lèi)型,以單數(shù)命名枚舉元素
建議131:用PascalCasing命名公開(kāi)元素
建議132:考慮用類(lèi)名作為屬性名
建議133:用camelCasing命名私有字段和局部變量
建議134:有條件地使用前綴
建議135: 考慮使用肯定性的短語(yǔ)命名布爾屬性
建議136:優(yōu)先使用后綴表示已有類(lèi)型的新版本
建議137:委托和事件類(lèi)型應(yīng)添加上級(jí)后綴
建議138:事件和委托變量使用動(dòng)詞或形容詞短語(yǔ)命名
建議139:事件處理器命名采用組合方式
第11章 代碼整潔
建議140:使用默認(rèn)的訪(fǎng)問(wèn)修飾符
建議141:不知道該不該用大括號(hào)時(shí),就用
建議142:總是提供有意義的命名
建議143:方法抽象級(jí)別應(yīng)在同一層次
建議144:一個(gè)方法只做一件事
建議145:避免過(guò)長(zhǎng)的方法和過(guò)長(zhǎng)的類(lèi)
建議146:只對(duì)外公布必要的操作
建議147:重構(gòu)多個(gè)相關(guān)屬性為一個(gè)類(lèi)
建議148:不重復(fù)代碼
建議149:使用表驅(qū)動(dòng)法避免過(guò)長(zhǎng)的if和switch分支
建議150:使用匿名方法、Lambda表達(dá)式代替方法
建議151:使用事件訪(fǎng)問(wèn)器替換公開(kāi)的事件成員變量
建議152:最少,甚至是不要注釋
建議153:若拋出異常,則必須要注釋
第12章 規(guī)范開(kāi)發(fā)行為
建議154:不要過(guò)度設(shè)計(jì),在敏捷中體會(huì)重構(gòu)的樂(lè)趣
建議155:隨生產(chǎn)代碼一起提交單元測(cè)試代碼
建議156:利用特性為應(yīng)用程序提供多個(gè)版本
建議157:從寫(xiě)第一個(gè)界面開(kāi)始,就進(jìn)行自動(dòng)化測(cè)試
媒體關(guān)注與評(píng)論
“這是一本關(guān)于C#編碼最佳實(shí)踐的集大成之作,也是一本能指導(dǎo)C#程序員編寫(xiě)出高質(zhì)量代碼的指點(diǎn)迷津之作。全書(shū)從C#語(yǔ)法、程序的架構(gòu)和設(shè)計(jì)、編碼規(guī)范和編程習(xí)慣3大方面為廣大的C#程序員們總結(jié)出了157條極富借鑒意義的建議,這些建議都是在實(shí)踐中被證明是解決C#編碼中疑難問(wèn)題的最佳實(shí)踐。如果能掌握本書(shū)中的內(nèi)容,不僅能加深對(duì)C#語(yǔ)言的理解和提升程序架構(gòu)和設(shè)計(jì)方面的能力,而且還能規(guī)范我們的開(kāi)發(fā)行為和習(xí)慣,讓我們成為一名優(yōu)秀的程序員,讓我們能編寫(xiě)出更高質(zhì)量的代碼?!薄 ?1CTO “作為一名程序員,沒(méi)有人愿意留下一堆糟糕的代碼。如果我們編寫(xiě)的代碼運(yùn)行速度慢、消耗的內(nèi)存多,而且還時(shí)不時(shí)地拋出一些莫名其妙的錯(cuò)誤,我們一定會(huì)十分疑惑:我們的代碼到底怎么了?問(wèn)題很明顯:我們編寫(xiě)的代碼質(zhì)量不高。本書(shū)從C#語(yǔ)言本身、程序的架構(gòu)和設(shè)計(jì)、編碼規(guī)范和編程習(xí)慣等3大方面就如何編寫(xiě)高質(zhì)量的C#代碼給出了大量的寶貴建議。如果能理解并熟練使用本書(shū)中的知識(shí),我們不僅能在一定程度上避免糟糕的代碼,而且還能大幅度提升編碼水平?!薄 R偉(資深微軟技術(shù)專(zhuān)家/ASP.NET MVP/暢銷(xiāo)書(shū)《ASP.NET 4權(quán)威指南》作者) “學(xué)習(xí)任何一門(mén)編程語(yǔ)言,入門(mén)一般都不難,難的是進(jìn)階和提高;讓程序跑起來(lái)不難,難的是如何讓程序跑得又快又好。作為一個(gè)程序員,我們?cè)谶M(jìn)階的路上總會(huì)遇到各種各樣的問(wèn)題,有時(shí)候需要為這些問(wèn)題付出代價(jià),需要在不斷試錯(cuò)和糾錯(cuò)中積累經(jīng)驗(yàn)。很幸運(yùn)的是,本書(shū)針對(duì)C#語(yǔ)法、程序的架構(gòu)和設(shè)計(jì)、編碼規(guī)范和編程習(xí)慣等3大方面給出了157條寶貴的建議,每一條建議都來(lái)自于實(shí)踐和經(jīng)驗(yàn)的總結(jié),每一條建議都能幫你避免在編碼時(shí)可能會(huì)犯下的錯(cuò)誤,實(shí)用性極強(qiáng)。強(qiáng)烈推薦!” ——姜曉東(資深微軟技術(shù)專(zhuān)家/暢銷(xiāo)書(shū)《C# 4.0權(quán)威指南》作者)
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版