《Effective C#》

iDotNetSpace發表於2009-08-12

 儘可能使用屬性而不是資料成員。原因非常簡單,因為屬性是類的外部介面,而資料成員為類的內部實現,使用屬性對內部成員進行封裝,並新增額外的功能,譬如賦值前檢查、設定為只讀等等,也更能符合OO的要求,畢竟把內部資料成員直接暴露給外界是十分危險的的事情。
      
      可能使用VS2003的朋友會覺得寫起來有些麻煩,但2005中己經有封裝欄位的功能,能幫我們省不少事,所以還是能使用屬性就使用屬性吧。

      最後再加一點我個人看法,這一點也不是太絕對,在一些非常小的,也不會改動的小工程中,直接使用內部成員也未嘗不可,儘管使用屬性會在JIT編繹時以Inline處理,效能上基本沒有損失,但屬性必竟是當作函式呼叫的,而且使用屬性和內部成員兩者成生的IL程式碼量相差也不少。

 Item2:Prefer readonly to const

      這個沒什麼好說的,如果決定使用常量,而且該常量能在編繹時確定,就使用const,如果是在執行時確定的,就使用readonly.只是要注意編繹時常量在編繹後會被替換成該常量的實際值,這可能會給以後的程式升級帶來影響。


Item3: Prefer the is or as Operators to Casts (is or as 優於強制轉換)

      型別轉換,一個老話題,一個在程式設計中應儘量避免但又可不能完全避免的問題,每種語言都有相應的型別轉換的操作符,c#也不例外,對於基元型別有Convert class,對於引用型別,其提供了is 和 as關鍵字。(注 is 也可用於值型別,但as只可用於引用型別或nullable型別)。這條主要是說對於引用型別的型別轉換,is or as 要優於強制轉換,主要原因是使用is or as型別轉換(注:準確的講 as  才算是型別轉換操作符,is僅能判斷型別,不能進行型別轉換)不會拋InvalidCastException,從而我們也不需要在程式中做相應的try...catch處理,當型別轉換符as轉換不成功時會返回null,我們只需對其返回結果進行檢查即可。

    as or is使用起來要注意一點,就是其不會呼叫使用者自己定義的型別轉換方法,它可以呼叫的方法為編繹時確定的型別所提供的方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-612014/,如需轉載,請註明出處,否則將追究法律責任。

相關文章