私は次のように作成する文字列を持っています:
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
て、セッターで「少し余分な作業」を行うことができます。
例えば:
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;
}
これはこの質問にはやり過ぎかもしれませんが、考えてみてください。
参照型であっても、値型のstring
ように動作するため、何かを割り当てるたびに、値の新しいコピーが保持されます。
ただし、そのように動作しない場合でも、label
値は他の2つの値に基づく合成値であるため、これでは問題は解決しません。
次のような方法でコードを設計する必要があります。
(単なる例)プロパティの1つが変更され(Name
またはNumber
)、イベントが発生したため、labelはその値を再計算します。
次のように、andLabel
を提供するクラス内にプロパティを実装できます。Name
Number
public string Label
{
get
{
return Name + " " + Number;
}
}