当C#中变量的值发生变化时,如何执行代码?

时间:2009-07-16 10:05:54

标签: c# delegates variables

我希望在特定变量的值发生变化时切换按钮的可见性。有没有办法将某种委托附加到一个变量,该变量在值变化时自动执行?

5 个答案:

答案 0 :(得分:18)

不,你不能做像C#中重载赋值运算符这样的事情。您可以做的最好的事情是将变量更改为属性并调用方法或委托或在其setter中引发事件。

private string field;
public string Field {
   get { return field; }
   set { 
       if (field != value) {
           field = value;
           Notify();
       } 
   }
}

这是由许多框架(如WPF DependencyProperty系统)完成的,以跟踪属性更改。

答案 1 :(得分:4)

使用 Observer pattern 。这是another reference

答案 2 :(得分:2)

您还可以在in WPF中使用数据绑定:Windows Forms。这允许您根据对象的属性更改GUI的状态,反之亦然

答案 3 :(得分:1)

没有办法做到这一点。变量基本上只是应用程序写入内存的位置。

改为使用属性:

string myVariable;
public string MyVariable
{
    get
    {
        return myVariable;
    }
    set
    {
        myVariable = value;
        MyVariableHasBeenChanged();
    }
}

private void MyVariableHasBeenChanged()
{

}

答案 4 :(得分:0)

您可以在模型中引用GUI(变量所在的位置)并直接在setter方法中执行GUI更改,或者让GUI通过观察者观察模型,并具有可观察模型的火灾事件对于二传手的观察者。前者最终将导致意大利面条代码,因为您在模型和视图之间添加了越来越多的直接链接,因此应该只用于内部工具和简单程序。