我正在尝试将c#代码转换为c++/cli。一切都很顺利,直到我开始将接口事件显式实现转换为c++/cli语法。
假设在c#中我有这个接口
public interface Interface
{
public event MyEventHandler Event;
}
在Class中以显式的方式实现,因此它不会与另一个成员的名称冲突:
public interface Class : Interface
{
event MyEventHandler Interface.Event;
public event AnotherEventHandler Event;
}
我正试图将Class转换为c++/cli如下:
public ref class Class : public Interface
{
virtual event MyEventHandler^ Event2 = Interface::Event
{
}
...
};
这不会编译给我语法错误在"…"= Interface::Event"部分。有没有人知道什么是正确的语法,或者它甚至存在于c++/cli中?我花了一些时间在网上搜索,但没有碰到任何有用的。
更新:这里是完整的c++/cli代码,演示了这个问题:
public delegate void MyEventHandle();
public delegate void AnotherEventHandle();
public interface class Interface
{
event MyEventHandler^ Event;
};
public ref class Class : public Interface
{
public:
virtual event MyEventHandler^ Event2 = Interface::Event
{
virtual void add(MyEventHandle^) {}
virtual void remove(MyEventHandle^) {}
}
event AnotherEventHandler^ Event;
};
vc++ 2012的错误输出为"error C2146: syntax error:在标识符'MyEventHandler'之前缺少';"
你必须让它看起来像这样:
event MyEventHandler^ Event2 {
virtual void add(MyEventHandler^ handler) = Interface::Event::add {
backingDelegate += handler;
}
virtual void remove(MyEventHandler^ handler) = Interface::Event::remove {
backingDelegate -= handler;
}
};