私は次のように作成する文字列を持っています:
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を提供するクラス内にプロパティを実装できます。NameNumber
public string Label
{
get
{
return Name + " " + Number;
}
}