我想知道从C++/CLI中引发事件的正确方式是什么。在C# one的hould first make a copy of the handler, check if it's not null, and then call it中。C++/CLI也有类似的实践吗?
发布于 2010-01-07 01:13:44
这不是故事的全部!您通常不必担心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方法中完成的。除非你真的想要自定义行为,否则你应该习惯于像上面的类那样声明你的事件,并引发它,而不用担心处理程序为空。
https://stackoverflow.com/questions/462805
复制相似问题