我有一个Foo类,它有一个公共事件Bar。我需要清除对Bar的所有订阅。
在C#中它就像(在Foo类中)一样简单:
public void RemoveSubscribers() { this.Bar = null; }
(另见this问题)
如何在C ++ / CLI中执行此操作?我无法将Bar设置为nullptr:编译器吐出错误
Usage requires 'Foo::Bar' to be a data member
我看过Bar的RemoveAll方法,但我不明白我应该提供什么作为参数......
编辑1: 为清楚起见,Bar声明如下:
public ref class Foo
{
public:
event MyEventHandler^ Bar;
};
答案 0 :(得分:1)
C ++ / CLI甚至在类中隐藏了底层后备存储(委托),因此您不能简单地将其设置为nullptr
。因为您不能依赖默认事件实现,所以您必须自己完成:
private: EventHandler^ _myEvent;
public: event EventHandler^ MyEvent
{
void add(EventHandler^ handler)
{
_myEvent += handler;
}
void remove(EventHandler^ handler)
{
_myEvent -= handler;
}
}
现在您可以简单地取消myEvent
委托:
_myEvent = nullptr;
这当然会改变你调用它的方式(与C#而不是C ++ / CLI短版本相同):
EventHandler^ myEvent = _myEvent;
if (myEvent != nullptr)
myEvent(this, e);