Effective C# 摘录(1) - C# Language Elements
1:用屬性來訪問類的私有成員
?? Always use properties instead of accessible data members.
2:為常量優先選擇readonly而不是const。
?? Prefer readonly to const.
?? const常量僅限于幾個基本類型,編譯時綁定;readonly常量在運行時綁定。
3:優先選擇is或者as操作符而不是做強制類型轉換.
?? Prefer the is or as operators to casts.
4:使用Conditional屬性來代替IF/ENDIF程序塊。
?? Use Conditional Attributes Instead of #if。
5: 始終提供一個有意義的ToString函數.
?? Always Provide ToString().
?? 默認繼承object的方法ToString()返回的結果是GetType()后轉換成String.
??
6:區別值類型數據和引用類型數據.
?? Distinguish Between Value Types and Reference Types.
?? 把底層面的數據用值類型來處理,而包含復雜操作,需要進行擴展的數據用引用類型來處理。
??????
7: 將值類型盡可能實現為具有常量性和原子性的類型.
?? Prefer Immutable Atomic Value Types.
?? 兩種方法:1.所有成員加上readonly標示,只在構造函數中被修改;2.刪除屬性set部分。
?? 在實現不可變的原子值類型(若其中包括引用類型分支)時,在進行成員賦值時,防止淺copy。
8: 確保0為值類型的有效狀態.
?? Ensure That 0 Is a Valid State for Value Types
?? 數值類型的默認值為0,但0在enum中可能無意義。
9: 理解4個相等判斷之間的關系.
?? Understand the Relationships Among ReferenceEquals(),static Equals(),instance Equals() and operator==.
?? ReferenceEquals():判斷兩個引用類型對象是否指向同一個地址;
?? static Equals()? :把比較的職責委交給了一個正在比較的類型(第一個參數的類型);
?? instance Equals():類型重載函數。不要在值類型中重載此運算符(boxing開銷);
?? operator==?????? :類型重載函數。不要在引用類型中重載此運算符;
10:理解GetHashCode()方法的缺陷.
?? Understand the Pitfalls of GetHashCode().
?? GetHashCode()的目的是產生一個Key,為了方便在HashTable或者Dictionary中的檢索。引用類型的GetHashCode()其實就是返回當前引用標記(一般都是正確的,不必override);值類型自帶的GetHashCode()是以其第一個成員的GetHashCode值作為其的返回值(一般都是不正確的)。
?? 不建議使用值類型對象的GetHashCode函數返回值來作為HashTable對象的Key;
?? 引用類型是可以使用的,但是要注意如果重寫了Equals函數,一定要重寫GetHashCode函數來達到一致;
?? 重寫此函數時注意:
????? 1.不管是值類型還是引用類型,要保證產生HashCode的成員不能被修改;
????? 2. 對于產生HashCode的成員修改,要以產生新對象進行處理,同時要在使用端作相應的修改,即先刪除舊的在添加新的。
11:優先采用foreach循環語句.
?? Prefer foreach Loops.
?? foreach能為迭代非0下限的數組、多維數組生成正確的代碼。但foreach有兩個限制:1.不能修改枚舉成員;2.不要對集合進行刪除操作。
?? ?
轉載于:https://www.cnblogs.com/happyhippy/archive/2007/03/15/675929.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Effective C# 摘录(1) - C# Language Elements的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: if嵌套练习
- 下一篇: 截取屏幕指定区域保存为BMP文件