我正在尝试将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输出的错误是“错误C2146:语法错误:缺少';'在标识符'MyEventHandler'“
之前答案 0 :(得分:5)
你必须看起来像这样:
event MyEventHandler^ Event2 {
virtual void add(MyEventHandler^ handler) = Interface::Event::add {
backingDelegate += handler;
}
virtual void remove(MyEventHandler^ handler) = Interface::Event::remove {
backingDelegate -= handler;
}
};