1

私は次のように作成する文字列を持っています:

string label = Name + " " + Number;

ここでNameNumberはプロパティです。NameまたはNumberが更新されるたびに、このラベル文字列を変更したいと思います。キーワードを使用しようとしましたrefが、C#でプロパティに使用できないと表示さrefれます。これを達成する方法はありますか?

4

3 に答える 3

6

getメソッドのみを使用して、別のプロパティとして作成します。

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

このように、プロパティを呼び出すたびに、 と の現在の値に基づいて戻り値が作成されNameますNumber

ただし、これはクラス レベルで定義する必要があり、Labelおそらく適切な名前でもありません。


もちろん、今の問題は、Labelそもそもなぜそれを呼び出すのかということです。

この値を使用して WinForms スタイルのラベル コントロールを設定していて、それを動的に更新したい場合は、別のアプローチが必要になります。現在のプロパティを変更NameNumberて、セッターで「少し余分な作業」を行うことができます。

例えば:

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;
}

これはこの質問にはやり過ぎかもしれませんが、考えてみてください。

于 2013-02-19T10:33:44.910 に答える
2

参照型であっても、値型stringように動作するため、何かを割り当てるたびに、値の新しいコピーが保持されます。

ただし、そのように動作しない場合でも、label値は他の2つの値に基づく合成値であるため、これでは問題は解決しません。

次のような方法でコードを設計する必要があります。

(単なる例)プロパティの1つが変更され(NameまたはNumber)、イベントが発生したため、labelはその値を再計算します。

于 2013-02-19T10:35:43.823 に答える
2

次のように、andLabelを提供するクラス内にプロパティを実装できます。NameNumber

public string Label 
{
    get
    {
        return Name + " " + Number;
    }
}
于 2013-02-19T10:34:35.607 に答える