Effective C# 讀書筆記(一):C#語言元素

來源:互聯網
上載者:User
 

1、使用屬性代替可訪問的資料成員

只要打算將資料暴露在類型的公有介面或受保護的介面中,我們都應該使用屬性來實現。對於具有序列或者字典特徵的類型,則應該採用索引器。所有資料成員都應一律聲明為私人。使用屬性的好處顯而易見:我們可以得到更好的資料繫結支援,我們可以更容易地在將來對其存取方法的實現做任何改變。將變數封裝在屬性中只不過增加幾行代碼。如果剛開始使用資料成員,後來又發現需要使用屬性,這時再來修改的成本將是幾個小時。今天投入一點,會為明天節省許多時間。

JIT編譯器會對某些方法調用(包括屬性訪問器)進行內聯處理,屬性和資料成員的效率沒有任何差別。及時屬性訪問器沒有被內聯,實際的效率差別相對於函數調用的成本來講也是可以忽略不計的。只有在很少的情況下,這種差別才值得我們注意。

 

2、運行時常量(readonly)優於編譯時間常量(const)

在c#中,我們用readonly關鍵字聲明運行時常量,用const關鍵字來聲明編譯時間常量。

編譯時間常量在編譯後的結果代碼中會被替換為該常量的值。運行時常量在運行時被計算,編譯後代碼將維持對readonly變數(而非它的值)的引用。

編譯時間常量只可用於實值型別,運行時常量則沒有限制。

使用const較之於使用readonly的唯一好處就是效能:使用已知常量值得代碼效率要比訪問readonly值的代碼效率稍好一點,但是其中的效率提升是非常小的。

只有當某些情況要求變數的值必須在編譯時間可用,才應該考慮使用const,例如:特性(attribute)類的參數,枚舉定義,以及某些不隨組件版本變化而變化的值。否則,對於其他任何情況,都應該優先選擇readonly常量,從而獲得其所具有的靈活性。

 

3、操作符is或as優於強制轉型

好的物件導向實踐對告誡我們避免轉型,但有時候我們別無選擇。不能避免轉型時,我們應該盡量使用as和is操作符來清晰的表達意圖。

當我們要立即進行轉型時,我們應使用as操作符。如果僅僅是進行類型的判斷而不需要立即進行轉型,使用is即可。

 

4、使用Conditional特性代替#if條件編譯

使用Conditional特性比使用#if/#endif產生的IL代碼更有效。同時,將其限制在函數層次上可以清晰的講條件行代碼分離出來,從而使我們的代碼具有更好的機構。另外,C#編譯器也為此提供了很好的支援,從而協助我們避免以前使用#if或#endif時犯的錯誤。

 

5、總是提供ToString()方法

System.Object預設提供的ToString()方法會傳回型別的名稱。我們可以簡單的重寫ToString()方法,來滿足我們的要求。也可以提供重載的ToString()方法,使用格式字串來為我們的類型指定自己的格式,滿足更複雜的需求。

 

6、優先採用foreach迴圈語句

foreach是一個非常有用的語句,它會使用最高效的構造為“數組的上下界索引”、“多維陣列遍曆”和“運算元轉型”產生正確的代碼,並且產生的是最具效率的迴圈結構。它是遍曆集合的最佳方式。

任何集合類型都可以使用foreach。有3種方法可以使一個類支援foreach方法:

(1)類型具備一個公有的GetEnumerator()方法;

(2)類型顯示實現了IEnumerable介面;

(3)類型實現了IEnumerator介面。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.