動態字符串我有我創建這樣的字符串:創建在C#
string label = Name + " " + Number;
其中Name
和Number
的性能。無論何時更新Name
或Number
,我都希望此標籤字符串發生更改。我嘗試使用ref
關鍵字,但C#告訴我,我無法使用ref
作爲屬性。有沒有辦法做到這一點?
動態字符串我有我創建這樣的字符串:創建在C#
string label = Name + " " + Number;
其中Name
和Number
的性能。無論何時更新Name
或Number
,我都希望此標籤字符串發生更改。我嘗試使用ref
關鍵字,但C#告訴我,我無法使用ref
作爲屬性。有沒有辦法做到這一點?
創建它作爲另一個屬性,只有get
方法:
public string Label { get { return Name + " " + Number; }}
這樣一來,每次調用它會創建一個基於Name
和Number
當前值的返回值屬性的時間。
雖然這需要在類級別上定義,並且Label
也可能不是合適的名稱。
當然,現在的問題是,爲什麼叫它Label
在第一位呢?
如果您使用此值來設置WinForms樣式標籤控件,並且您想要動態更新它,那麼您將需要一種不同的方法。你可以修改你當前的屬性Name
和Number
在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;
}
這可能是矯枉過正了這個問題,但只是一些思考。
不錯!!!令人讚歎的答案 – asifsid88 2013-02-19 10:34:45
你可以實現一個Label
特性,提供Name
和Number
,像這樣的類中:
public string Label
{
get
{
return Name + " " + Number;
}
}
即使是一個引用類型一個string
表現得像值類型,所以每次你分配給它一些新的拷貝的值。
但即使它的行爲不如此,這也不能解決您的問題,因爲您的label
值是基於其他2個值的合成值。
您需要構建您的代碼的方式,那個時候:
(只是一個例子)的屬性之一改變(Name
或Number
),引發的事件,所以標註重新計算它的價值。
爲什麼不能只更新'Name'和'Number'屬性設置器中的字符串? – 2013-02-19 10:33:22