2012-08-25 208 views
0

我正在制作一个图形控制类Info它应该在屏幕上显示一些文本。文本是一些对象的字符串。我希望能够从Info类的实例中获取该对象的最新值。如何将对象的属性绑定到另一个对象的属性? (C#)

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 
} 

我该如何更改代码才能从绘图部分获取最新的字符串值?

+0

我敢肯定,标题并没有尽可能多地理解它。如果你知道更好的措辞,随意编辑。 – user1306322

回答

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. 
} 
+0

除非ClassA的字符串不一定。我正在寻找更具普遍性的东西。 – user1306322

+0

太棒了!这正是我一直在寻找的! – user1306322

相关问题