如何将对象的属性绑定到另一个对象的属性? (C#)

时间:2012-08-25 19:13:46

标签: c#

我正在创建一个图形控件类Info,它应该在屏幕上显示一些文本。文本是一些对象的字符串。我希望能够从Info类的实例中获取该对象的最新值。

class Info
{
    public string Text;
}

void Program()
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info();
    wind1.Text = obj.name; // this just copies current value, but should be a reference or something 

    /* obj.name value changes several times before it's time to display it again */

    // Info window drawing method
    foreach (var item in Windows) // Windows is List<Info>
    Draw(item.Text); // this doesn't get the latest value
}

我应该如何更改代码,以便从绘图部分获取最新的字符串值?

1 个答案:

答案 0 :(得分:3)

更新:如果您需要适用于任何类型的内容,则必须使用委托。例如:

class Info
{
    private Func<string> getText;

    public Info(Func<string> getText)
    {
        getText = getText;
    }

    public string Text
    {
        get
        {
            return getText();
        }
    }
}

void Program
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info(() => obj.name);

    // Now do your stuff.
}

在这种情况下,Info会被赋予一个返回字符串的匿名函数。当您访问其Text属性时,将评估该函数以检索该字符串。如何检索字符串以及它来自何处,由客户端代码(即Program方法)确定。这样,Info不依赖于任何特定类型。


您可以将ClassA对象传递到Info实例中,以便它可以获得.name本身的值。

也许是这样的事情?

class Info
{
    public Info(ClassA obj)
    {
        TheObject = obj;
    }

    public ClassA TheObject
    {
        get;
        set;
    }

    public string Text
    {
        get
        {
            return TheObject.name;
        }
    }
}

void Program
{
    ClassA obj = new ClassA();
    obj.name = "Instance of ClassA";
    Info wind1 = new Info(obj);

    // Now do your stuff.
}