gpt4 book ai didi

.net - 如何清除 C++/CLI 中的事件订阅?

转载 作者:行者123 更新时间:2023-12-01 13:53:59 25 4
gpt4 key购买 nike

我有一个 Foo 类,它有一个公共(public)事件 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;
};

最佳答案

C++/CLI 甚至在类中隐藏底层后备存储(委托(delegate)),因此您不能简单地将它设置为 nullptr。因为你不能依赖默认的事件实现,所以你必须自己做:

private: EventHandler^ _myEvent;

public: event EventHandler^ MyEvent
{
void add(EventHandler^ handler)
{
_myEvent += handler;
}

void remove(EventHandler^ handler)
{
_myEvent -= handler;
}
}

现在您可以简单地取消 myEvent 委托(delegate):

_myEvent = nullptr;

当然,这也会改变您调用它的方式(与 C# 相同,而不是 C++/CLI 短版):

EventHandler^ myEvent = _myEvent;
if (myEvent != nullptr)
myEvent(this, e);

关于.net - 如何清除 C++/CLI 中的事件订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com