在C#中创建动态字符串

时间:2013-02-19 10:32:25

标签: c# string ref

我创建的字符串如下:

string label = Name + " " + Number;

其中NameNumber是属性。我想要在更新NameNumber时更改此标签字符串。我尝试使用ref关键字,但C#告诉我,我不能将ref用于属性。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:6)

将其创建为另一个属性,仅使用get方法:

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

这样,每次调用属性时,它都会根据NameNumber的当前值创建返回值。

这需要在类级别定义,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;
}

对于这个问题,这可能有些过分,但只需考虑一下。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

即使是引用类型string的行为类似于值类型,因此每次为其分配内容时,它都会保留新的副本的价值。

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

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

(仅举例)其中一个属性已更改(NameNumber),事件已引发,因此标签重新计算其值。