2014-02-20 53 views
0

我有基本的屬性,但我沒有看到他們真正的用途。它不只是返回一個方程的價值?我的意思是,如果你只是寫下一個簡單的公式,就沒有必要使用一個屬性。屬性有什麼特別之處?

例如:

int currentValue; 

public int CurrentValue 
{ 
    get { return currentValue; } 
    set { currentValue = value; } 
} 

是像剛纔一樣的東西:

currentValue; 

又如:

int currentValue; 

public int CurrentValue 
{ 
    get { return currentValue * 5; } 
    set { currentValue = value; } 
} 

是同樣的事情:

currentValue = currentValue * 5; 
+4

我不知道我下面你或你不具備基本下跌:)。 – nphx

+2

你的意思是「這不是暴露在外地嗎?」答案是否定的,出於各種原因。見http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –

+0

+1對於'「..properties,但我沒有看到它們的實際用途。」' – gleng

回答

4

在你的第一個例子中,Public Fields versus Automatic Properties是一個很好的答案。基本上,你應該總是使用屬性而不是非private的東西。這可以讓你做一些事情,比如稍後修改代碼而不會破壞事情,然後製作一個private set。屬性也可以做一些事情,比如通知代碼發生改變或輕鬆提供默認值或計算值。您還可以使用自動屬性來削減多餘的代碼:

public int CurrentValue { get; set; } 

你的第二個例子是不是一個很好的使用特性,因爲它打破的特性是如何工作的假設。例如。如果我將該屬性設置爲3,並且不會拋出異常,那麼當我得到它時,我認爲它是3,而不是15currentValue = currentValue * 5;,這可能與字段,屬性或局部變量有關,使值增大5倍。也許你的意思是這樣的:

int currentBackingValue; 

public int CurrentValue 
{ 
    get { return currentBackingValue * 5; } 
} 

如果沒有set,這可以很好地工作,並沒有打破任何慣例和假設:CurrentValue基於currentBackingValue計算。

(順便說一句,你應該注意的是物業的get TER值和set TER值,實際上,方法,只是現場的語法用來替代類似Java的getX/setX標準)

1

如果您想爲代碼添加一些額外的功能,集中您的功能,那麼您只能在一個位置更改它,吸氣器和設置器屬性非常方便。你幾乎不知道什麼時候你必須改變一些東西,但你可以準備。

這與封裝和信息隱藏的概念一起,是基本的OOP的概念,但非常重要...


V E R Y     I M P O R T A N T


不要小看這巨大的力量D:

其如此強大......

0

屬性也用於其他許多屬性中。如果沒有它們(在setter中調用PropertyChanged事件),WPF將無法正常工作,WCF在數據合同中廣泛使用它們。

特別是關於WPF,屬性的力量是「get」和「set」字段都是函數所以除了返回或設置後臺私有成員之外,還可以做很多事情。這比您想象的多出手。

實例屬性(WPF)

public String UIDisplayedString 
{ 
    get { return _member; } 
    set 
    { 
     _member = value; 
     PropertyChanged(new PropertyChangedEventArgs("UIDisplayedString")); 
    } 
相關問題