我想知道从 C++/CLI 引发事件的正确方法是什么。在 C# 中 hould first make a copy of the handler, check if it's not null, and then call it . C++/CLI 是否有类似的做法?
最佳答案
这不是故事的全部!您通常不必担心 C++/CLI 中的空事件处理程序。这些检查的代码是为您生成的。考虑以下简单的 C++/CLI 类。
public ref class MyClass
{
public:
event System::EventHandler ^ MyEvent;
};
如果你编译这个类,并使用 Reflector 反汇编它,您将获得以下 c# 代码。
public class MyClass
{
// Fields
private EventHandler <backing_store>MyEvent;
// Events
public event EventHandler MyEvent
{
[MethodImpl(MethodImplOptions.Synchronized)] add
{
this.<backing_store>MyEvent = (EventHandler) Delegate.Combine(this.<backing_store>MyEvent, value);
}
[MethodImpl(MethodImplOptions.Synchronized)] remove
{
this.<backing_store>MyEvent = (EventHandler) Delegate.Remove(this.<backing_store>MyEvent, value);
}
raise
{
EventHandler <tmp> = null;
<tmp> = this.<backing_store>MyEvent;
if (<tmp> != null)
{
<tmp>(value0, value1);
}
}
}
}
通常的检查是在 raise 方法中完成的。除非你真的想要自定义行为,否则你应该像在上面的类中一样声明你的事件,并在不担心空处理程序的情况下引发它。
关于events - 从 C++/CLI 引发事件的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462805/