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.不要對集合進行刪除操作。
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章