我有一个实现接口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':
答案 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);
}
};
请考虑这是否真的是你想做的事情,这是不太可能是正确的。