这似乎是该语言的基础知识,但我不明白这是如何在.Net中完成的。我在一个类中有一个成员变量,比如bool _isCommitted
。我希望只要_isCommitted
为真,就会发生一些事情。像这样:
//Whenever _isCommitted == true()
{
Foo()
}
基本上就像一个事件,但这里是我的变量。如何?非常感谢..
答案 0 :(得分:12)
这通常通过属性和支持私有字段来完成。您需要确保您只能通过酒店进入。
private bool _isCommitted;
public bool IsCommitted
{
get { return _isCommitted; }
set
{
if(value)
{
//do something
}
_isCommitted = value;
}
}
答案 1 :(得分:3)
在最基本的级别,您可以在班级中创建一个活动:
public delegate void MyHandler(bool b);
public event MyHandler CommittedChanged;
现在人们可以像这样订阅你的活动:
public void SomeHandlerMethod(bool b) { ... }
...
someInstance.CommittedChanged += SomeHandlerMethod;
someInstance.CommittedChanged += ASecondHandlerMethod;
someInstance.CommittedChanged += x => { /* inline handler using lambda */ };
用户可以通过这种方式取消注册其事件处理程序:
someInstance.CommittedChanged -= SomeHandlerMethod;
无论您决定更改变量,都会按照以下方式进行操作:
if (CommittedChanged != null) CommittedChanged(_isCommitted);
这将调用已为您的活动注册功能的所有人。
说到这里,你可以做很多改进。首先,将_isCommitted放入属性中,并在其setter中执行事件回调。这样,您就不会忘记致电处理程序。
public IsCommitted {
get { return _isCommitted; }
set {
_isCommitted = value;
if (CommittedChanged != null) CommittedChanged(_isCommitted);
}
}
详细了解活动here。
这足以让你前进。但是,如果您深入研究C#框架,您将找到在System.ComponentModel
命名空间内使用此事件框架的标准方法。最后,界面INotifyPropertyChanged
与一个更通用的事件系统紧密相关,该系统也可以与微软自己的一些技术(如WPF)配合使用,允许GUI元素自动获取类的更改。详细了解INotifyPropertyChanged
here。
答案 2 :(得分:1)
你基本上需要PropertyChangedEvent PropertyChangedEventHandler Delegate
答案 3 :(得分:1)
我认为C# properties就是您所需要的。
private bool _isCommitted;
public bool IsCommitted
{
get { return _isCommitted; }
set { if(value){/*DO SOMETHING HERE*/}
_isCommitted = value; }
}