我在我的类中定义了一个新成员
protected COMObject.Call call_ = null;
这个类有一个我订阅的以下事件处理程序
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);
以下代码将会移除事件处理程序吗?
将成员设置为null如下所示:
call_ = null;
还是我必须使用 -= 取消订阅?
我在我的类中定义了一个新成员
protected COMObject.Call call_ = null;
这个类有一个我订阅的以下事件处理程序
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);
以下代码将会移除事件处理程序吗?
将成员设置为null如下所示:
call_ = null;
还是我必须使用 -= 取消订阅?
是的,你应该使用重载的-=
来取消订阅一个事件。
简单地将引用赋值为null
并不能自动完成取消订阅。对象仍会继续监听该事件。
call_
对象没有设置为null,只有call_
被设置为null,它只是对该对象的一个引用,可能会有其他引用(在事件处理程序中)。归根结底,我们不是将对象设置为null,而是将引用设置为null。 - Jon Hanna移除所有事件,假设事件是“Action”类型:
Delegate[] dary = TermCheckScore.GetInvocationList();
if ( dary != null )
{
foreach ( Delegate del in dary )
{
TermCheckScore -= ( Action ) del;
}
}
TermCheckScore
,那么您必须在声明类型中。这种情况下,只需将其设置为null即可。TermCheckScore = null;
可以做到与此相同的效果,但更加高效。 - Marc Gravell