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;
}

私は次のようにクラスを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' "

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 に答える