2013-02-19 64 views
1

動態字符串我有我創建這樣的字符串:創建在C#

string label = Name + " " + Number; 

其中NameNumber的性能。無論何時更新NameNumber,我都希望此標籤字符串發生更改。我嘗試使用ref關鍵字,但C#告訴我,我無法使用ref作爲屬性。有沒有辦法做到這一點?

+3

爲什麼不能只更新'Name'和'Number'屬性設置器中的字符串? – 2013-02-19 10:33:22

回答

6

創建它作爲另一個屬性,只有get方法:

public string Label { get { return Name + " " + Number; }} 

這樣一來,每次調用它會創建一個基於NameNumber當前值的返回值屬性的時間。

雖然這需要在類級別上定義,並且Label也可能不是合適的名稱。


當然,現在的問題是,爲什麼叫它Label在第一位呢?

如果您使用此值來設置WinForms樣式標籤控件,並且您想要動態更新它,那麼您將需要一種不同的方法。你可以修改你當前的屬性NameNumber在setters中做一些「額外的工作」。

例如:

private string _name 
public string Name 
{ 
    get { return _name; } 
    set { _name = value; DoChange(); } 
} 

private string _number 
public string Number 
{ 
    get { return _number; } 
    set { _number = value; DoChange(); } 
} 

public string Label { get { return Name + " " + Number; }} 

private void DoChange() 
{ 
    MyLabel.Text = Label; 
} 

這可能是矯枉過正了這個問題,但只是一些思考。

+0

不錯!!!令人讚歎的答案 – asifsid88 2013-02-19 10:34:45

2

你可以實現一個Label特性,提供NameNumber,像這樣的類中:

public string Label 
{ 
    get 
    { 
     return Name + " " + Number; 
    } 
} 
2

即使是一個引用類型一個string表現得像值類型,所以每次你分配給它一些新的拷貝的值。

但即使它的行爲不如此,這也不能解決您的問題,因爲您的label值是基於其他2個值的合成值。

您需要構建您的代碼的方式,那個時候:

(只是一個例子)的屬性之一改變(NameNumber),引發的事件,所以標註重新計算它的價值。