我创建的字符串如下:
string label = Name + " " + Number;
其中Name
和Number
是属性。我想要在更新Name
或Number
时更改此标签字符串。我尝试使用ref
关键字,但C#告诉我,我不能将ref
用于属性。有没有办法实现这个目标?
答案 0 :(得分:6)
将其创建为另一个属性,仅使用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;
}
对于这个问题,这可能有些过分,但只需考虑一下。
答案 1 :(得分:2)
您可以在提供Label
和Name
的类中实现Number
属性,如下所示:
public string Label
{
get
{
return Name + " " + Number;
}
}
答案 2 :(得分:2)
即使是引用类型,string
的行为类似于值类型,因此每次为其分配内容时,它都会保留新的副本的价值。
但即使它不会那样,这也无法解决您的问题,因为您的label
值是基于其他2个值的组合值。
您需要以某种方式构建代码,即:
(仅举例)其中一个属性已更改(Name
或Number
),事件已引发,因此标签重新计算其值。