您好,我正在尝试在托管c++ dll中实现C#接口(interface),如下所示:
public ref class MyClass : public IMyInterface
{
// Inherited via IMyInterface
virtual event EventHandler<MyEventArgs ^> ^ MyLoadedEvent;
public:
virtual event EventHandler<MyEventArgs ^> MyLoadedEvent
{
void add(MyEventArgs ^ f)
{
// some magic
}
void remove(MyEventArgs ^ f)
{
// some magic
}
}
}
但是我不断收到两个错误:
1)事件类型必须是委托(delegate)到委托(delegate)类型
2)类无法实现在... dll中声明的接口(interface)成员函数“MyLoadedEvent::add”
我在实现中缺少什么,或者实现接口(interface)事件的正确方法是什么?
谢谢!
最佳答案
第一个错误是由于缺少^帽子引起的,第二个错误是由于未命名实现的接口(interface)方法引起的。假设接口(interface)事件被命名为“Loaded”,则正确的语法应类似于:
public ref class MyClass : IMyInterface {
EventHandler<MyEventArgs^>^ MyLoadedEventBackingStore;
public:
virtual event EventHandler<MyEventArgs^>^ MyLoadedEvent {
void add(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::add {
MyLoadedEventBackingStore += arg;
}
void remove(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::remove {
MyLoadedEventBackingStore -= arg;
}
}
};