4

我正在尝试将 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: missing ';' 在标识符“MyEventHandler”之前”

4

1 回答 1

5

你必须让它看起来像这样:

event MyEventHandler^ Event2 {
    virtual void add(MyEventHandler^ handler) = Interface::Event::add {
        backingDelegate += handler;
    }
    virtual void remove(MyEventHandler^ handler) = Interface::Event::remove {
        backingDelegate -= handler;
    }
};
于 2013-03-14T10:26:04.890 回答