3 回答
TA贡献1772条经验 获得超8个赞
在我看来,您想创建一个属性。
public int MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
if (_myProperty == 1)
{
// DO SOMETHING HERE
}
}
}
private int _myProperty;
这使您可以在属性值更改时随时运行一些代码。如果您愿意,可以在这里提出一个活动。
TA贡献2065条经验 获得超14个赞
每当字段的值要更改时,都可以使用属性设置器引发事件。
您可以拥有自己的EventHandler委托,也可以使用著名的System.EventHandler委托。
通常有一种模式:
使用事件处理程序委托(其参数类型为EventArgs)定义公共事件。
定义一个受保护的虚拟方法,称为OnXXXXX(例如OnMyPropertyValueChanged)。在此方法中,您应该检查事件处理程序委托是否为null,如果不是,则可以调用它(这意味着事件委托附加了一个或多个方法)。
每当您想通知订阅者某些更改时,请调用此受保护的方法。
这是一个例子
private int _age;
//#1
public event System.EventHandler AgeChanged;
//#2
protected virtual void OnAgeChanged()
{
if (AgeChanged != null) AgeChanged(this,EventArgs.Empty);
}
public int Age
{
get
{
return _age;
}
set
{
//#3
_age=value;
OnAgeChanged();
}
}
这种方法的优势在于,如果需要,您可以让任何其他想要从您的类继承的类更改其行为。
如果要在正在引发的其他线程中捕获事件,则必须注意不要更改在另一个线程中定义的对象的状态,这将导致引发跨线程异常。为避免这种情况,您可以在要更改其状态的对象上使用Invoke方法,以确保更改在引发事件的同一线程中进行,或者在处理Windows窗体的情况下,可以使用BackgourndWorker在并行线程中轻松轻松地执行操作。
- 3 回答
- 0 关注
- 692 浏览
添加回答
举报