CLI / C ++虚拟EventHandler

时间:2011-09-01 13:54:22

标签: event-handling c++-cli virtual

我有一个实现接口I的A类。

在界面I中是声明:

virtual event System::EventHandler ^eh;

在A的头文件中,我通过类似声明来实现:

virtual event System::EventHandler ^eh;

在A的cpp文件中我想将事件的委托分配给anotheter变量:

EventHandler ^eh2 = eh;

这会产生错误

  

错误285错误C3918:使用需要'eh'作为数据

我也试试

EventHandler^ eh2 = gcnew System::EventHandler(eh);

这会出错:

  

错误285错误C3924:委托构造函数的参数#1中的错误   调用'System :: EventHandler':

1 个答案:

答案 0 :(得分:4)

event 关键字明确禁止访问此类事件。唯一有效的操作是添加一个处理程序(+ =运算符),删除一个( - =运算符)并引发事件。如果要访问底层委托对象,则必须提供添加和删除访问器以包装委托对象,而不是使用编译器生成的默认对象。像这样:

public interface class IFoo {
    event EventHandler^ eh;
};

ref class Bar : IFoo {
private:
    EventHandler^ dlg;
public:
    event EventHandler^ eh {
        virtual void add(EventHandler^ handler) { dlg += handler; }
        virtual void remove(EventHandler^ handler) { dlg -= handler; }
    };
public:
    void test() {
        EventHandler^ copy = dlg;
        // etc.., fire for example
        copy(this, EventArgs::Empty);
    }
};

请考虑这是否真的是你想做的事情,这是不太可能是正确的。