1

我有我创建的字符串:

string label = Name + " " + Number;

whereNameNumber是属性。我希望这个标签字符串在NameorNumber更新时改变。我尝试使用ref关键字,但 C# 告诉我不能ref用于属性。有没有办法做到这一点?

4

3 回答 3

6

将其创建为另一个属性,只有一个get方法:

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

这样,每次调用该属性时,它都会根据Nameand的当前值创建返回值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

您可以Label在提供Nameand的类中实现一个属性,Number如下所示:

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

即使是引用类型a 的string行为也像值类型,所以每次你给它赋值时,它都会保留一个新的值副本

但即使它不会那样做,这也不会解决您的问题,因为您的label值是基于其他 2 个值的组合值。

您需要以某种方式构建您的代码,即:

(只是一个例子)其中一个属性被更改(NameNumber),引发事件,因此标签重新计算其值。

于 2013-02-19T10:35:43.823 回答