日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。

發(fā)布時間:2025/3/16 C# 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Effective C# 原則1:盡可能的使用屬性(property),而不是數據成員(field)。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

我們的目標:盡可能編寫出運行效率更高,更健壯,更容易維護的C#代碼。

原則一:盡可能的使用屬性(property),而不是數據成員(field)。

Always use properties instead of accessible data members.

出于以下幾點原因,請在設計類時,盡可能的使用屬性,而不是成員。

1、.Net對屬性的支持遠遠大于對成員的支持,你可以對屬性進行數據綁定,設計時說明等很多數據成員不被支持的內容。看看.net里的屬性面板,你會明白的。

2數據安全性檢測;

屬性本質上是兩個函數,只是因為C#的特殊語法,但我們可以像訪問成員一樣的訪問它。因此我們可以在屬性設計上添加更多更靈活的內容,對屬性進行管理。其中對屬性數據的檢測是其中之一。

在對數據檢測時,如果發(fā)現數據不滿足條件,最好以拋出異常的形式來解決,千萬不要設置默認值,這是很危險的事情。例如:

public string Name{

?????? get{

?????? ?????? if(this._Name==null){

????????????? ?????? return “NoName”;

}else{

?????? return this._Name;

}

}

set{

?????? if(value==null){

?????? ?????? this._Name = “NoName”;

}else if(value.Length<=10){

?????? this._Name = value;

}else{

?????? this._Name = value.SubString(0,10);

}

}

}

看上去很不錯不是嗎?請馬上動手修改你的代碼吧,上面的代碼是很危險的!或者你還不明白,明明對數據進行了安全檢測,為什么還是危險的呢?試想這樣的情況,有兩個實例o1o2, o1Namenull,我們做了這樣的事:o2.Name = o1.Name;

結果是什么?o2.Name”NoName”,而在本質上,o1o2Name是根本不相等的。這會對后面的程序運行帶來很大的麻煩。請以拋出異常的形式來解決數據不滿足條件時的問題。

3、線程同步

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

public string Name{

?????? set{

?????? ?????? lock(this){

????????????? ?????? //…

}

}

}

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

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

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

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

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

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

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

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

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

總結

以上是生活随笔為你收集整理的Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。