Effective C# 摘錄(1) – C# Language Elements

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.