程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則1:盡可能的使用屬性(property),而不是數據成員(field)(2)

Effective C#原則1:盡可能的使用屬性(property),而不是數據成員(field)(2)

編輯:關於C語言

3、線程同步

對 實例的屬性可以進行線程同步,而與訪問者無關。例如:

public string Name{
    set{
       lock(this){
            //…
}
}
}

當然,你 完全可以在類的外面進行線程同步,但那樣的工作量遠比上面的方法大得多。推 薦你使用上面的方法進行線程同步,如果要對靜態成員同步,請用lock(typeof (MyClass))方法。

4、屬性可以是抽象的,而數據成員不能是抽象的,這 為我們設計出兼容性更強,擴展性更強的類提供了好的解決方案。

5、屬 性可以以接口的形式表現。接口裡不能定義數據成員,這在一定程度上限制我們 的設計。請用屬性來解決這個問題吧。

6、基於屬性的索引。索引器是C# 語法的特殊內容,而索引器正是通過屬性來完成的,如果你想為你的類添加一個 索引器,除了用屬性你還能用什麼呢?

7、最後一點,也是比較重要的。 不要直接把公共成員轉化成屬性。

看了上面的說明,是不是覺得應該馬 上把所有的數據成員都修改成屬性了呢?在你修改前一定要閱讀下面的內容。

不要直接把公共成員轉化成屬性。它們在C#的源代碼級上的語法雖然是 相同的,但在IL上是不同的。即:o1.Name(屬性)和o1.Name(成員),雖然C#代碼 一樣,但IL的代碼是不一樣的。所以,當你准備修改所有的數據成員時,必須重 新編譯類的代碼,同時也要重新編譯訪問該類實例的所有相關代碼。所以,在你 設計時不要為了方便,想先用數據成員使用,然後在後期再修改成屬性,這不是 一個好主意。

最後,不要為因為使用屬性而使IL代碼多了幾行而擔心。 雖然數據成員在訪問上比屬性要快一點,但在實際運行時,不僅對人覺得是一樣 的,對機器而言感覺也像是一樣的快,因為我的CPU越來越快了,完成一個函數 調用太快了,跟完成一個數據訪問一樣的快(當然,這個函數得足夠小,就跟我 們的屬性一樣),呵呵。

OK,關於使用屬性的問題就先說這些。

返回教程目錄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved