# 第一章 C# 語言習慣
**By D.S.Qiu**
尊重他人的勞動,**支持原創,轉載請注明[出處](/blog/1986914):[http://dsqiu.iteye.com](http://dsqiu.iteye.com)**
為什么程序已經能正常工作了,你還要改變它呢?答案就是你相信可以讓它變得更好。你改變工具或語言,因為你可以變得更富有成效。如果你不改變你的習慣,你將不會受到預期的效果。對于C#這種和我們已經熟悉的語言,如 C++ 或 Java 有諸多共通之處的新語言,情況更是如此。 C# 是另一個強大的語言,很容易陷入其他語言的語言習慣。這將阻止你掌握最有效的 C# 。 C# 語言從2001年發布的第一個商業化版本以來一直在演變。相比早期的版本,它變得更加遠離 C++ 或 Java 。如果你是從另一種語言轉到 C# 語言的,你需要學習 C# 的習慣用法以至于語言為你所有,而不是阻礙你。本章討論你應該改變的習慣并且你需要做什么。
小結:
附上第一章的目錄:
+ [原則1:使用 屬性(Poperty)代替可直接訪問的數據成員(Data Member)](/blog/1976256)
+ [原則2:偏愛 readonly 而不是 const](/blog/1976703)
+ [原則3:選擇 is 或 as 而不是強制類型轉換](/blog/1977594)
+ [原則4:使用條件特性(conditional attribute)代替 #if](/blog/1979093)
+ [原則5:總是提供 ToString()](/blog/1979985)
+ [原則6:理解幾個不同相等概念的關系](/blog/1980083)
+ [原則7:明白 GetHashCode() 的陷阱](/blog/1981202)
+ [原則8:優先考慮查詢語法(query syntax)而不是循環結構](/blog/1982137)
+ [原則9:在你的 API 中避免轉換操作](/blog/1983118)
+ [原則10:使用默認參數減少函數的重載](/blog/1986873)
+ [原則11:理解小函數的魅力](/blog/1986910)
從字面上看,感覺第一章主要介紹的是 C# 的語法,但是D.S.Qiu 重點應該是本書或者是 C# 強調的規范或編程模式。
D.S.Qiu
Effective C# 中文版改善C#程序的50種方法 第二版
Effective C# : 50 Specific Ways to Improve Your C# 2nd Edition
- 第一章 C# 語言習慣
- 原則1:使用 屬性(Poperty)代替可直接訪問的數據成員(Data Member)
- 原則2:偏愛 readonly 而不是 const
- 原則3:選擇 is 或 as 而不是強制類型轉換
- 原則4:使用條件特性(conditional attribute)代替 #if
- 原則5:總是提供 ToString()
- 原則6:理解幾個不同相等概念的關系
- 原則7:明白 GetHashCode() 的陷阱
- 原則8:優先考慮查詢語法(query syntax)而不是循環結構
- 原則9:在你的 API 中避免轉換操作
- 原則10:使用默認參數減少函數的重載
- 原則11:理解小函數的魅力
- 第二章 .NET 資源管理
- 原則12:選擇變量初始化語法(initializer)而不是賦值語句
- 原則13:使用恰當的方式對靜態成員進行初始化
- 原則14:減少重復的初始化邏輯
- 原則15:使用 using 和 try/finally 清理資源
- 原則16:避免創建不需要的對象
- 原則17:實現標準的 Dispose 模式
- 原則17:實現標準的 Dispose 模式
- 原則18:值類型和引用類型的區別
- 原則19:確保0是值類型的一個有效狀態
- 原則20:更傾向于使用不可變原子值類型
- 第三章 用 C# 表達設計
- 原則21:限制你的類型的可見性
- 原則22:選擇定義并實現接口,而不是基類
- 原則23:理解接口方法和虛函數的區別
- 原則24:使用委托來表達回調
- 原則25:實現通知的事件模式
- 原則26:避免返回類的內部對象的引用
- 原則27:總是使你的類型可序列化
- 原則28:創建大粒度的網絡服務 APIs
- 原則29:讓接口支持協變和逆變
- 第四章 和框架一起工作
- 原則30:選擇重載而不是事件處理器
- 原則31:用 IComparable<T> 和 IComparer<T> 實現排序關系
- 原則32:避免 ICloneable
- 原則33:只有基類更新處理才使用 new 修飾符
- 原則34:避免定義在基類的方法的重寫
- 原則35:理解 PLINQ 并行算法的實現
- 原則36:理解 I/O 受限制(Bound)操作 PLINQ 的使用
- 原則37:構造并行算法的異常考量
- 第五章 雜項討論
- 原則38:理解動態(Dynamic)的利與弊
- 原則39:使用動態對泛型類型參數的運行時類型的利用
- 原則40:使用動態接收匿名類型參數