首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从C++/CLI引发事件的正确方式?

从C++/CLI引发事件的正确方式?
EN

Stack Overflow用户
提问于 2009-01-20 19:46:22
回答 1查看 23.7K关注 0票数 15

我想知道从C++/CLI中引发事件的正确方式是什么。在C# one的hould first make a copy of the handler, check if it's not null, and then call it中。C++/CLI也有类似的实践吗?

EN

回答 1

Stack Overflow用户

发布于 2010-01-07 01:13:44

这不是故事的全部!您通常不必担心C++/CLI中的空事件处理程序。将为您生成这些检查的代码。考虑下面这个简单的C++/CLI类。

代码语言:javascript
复制
public ref class MyClass
{
public:
    event System::EventHandler ^ MyEvent;
};

如果编译这个类,并使用Reflector对其进行反汇编,则会得到以下c#代码。

代码语言:javascript
复制
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方法中完成的。除非你真的想要自定义行为,否则你应该习惯于像上面的类那样声明你的事件,并引发它,而不用担心处理程序为空。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/462805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档