7

私はいくつかの古いマネージC++コードを次のような行で更新しています:

instanceOfEventSource->add_OnMyEvent( 
    new EventSource::MyEventHandlerDelegate(this, MyEventHandlerMethod) );

どこ

  • EventSourceは、イベントを公開するクラスです
  • instanceOfEventSourceは、そのクラスのインスタンスです
  • EventSource :: MyEventHandlerDelegateは、イベントのデリゲートタイプです
  • MyEventHandlerMethodは、現在のクラス(「this」はインスタンス)内の(非静的)メソッドであり、署名がEventSource::MyEventHandlerDelegateと一致します。

C ++ / CLIでこれを行うための正しい構文は何ですか?

4

2 に答える 2

7

構文は C# のものと似ています。つまり、+=これを可能にするためにオーバーロードされています。

instanceOfEventSource.MyEvent +=
    gcnew EventSource::MyEventHandlerDelegate(this, &MyClass::MyEventHandlerMethod);

削除についても同様です。ただし、C# とは異なり、イベント ハンドラー デリゲートの明示的なインスタンス化を省略できないため、非常に長いコードが生成されます。

于 2009-01-28T22:15:27.523 に答える
2

静的メソッドをイベントのコールバック メソッドとして登録する方法を理解するのに 30 分を費やしました。OP は特に静的メソッドの登録を求めていませんでしたが、これは同じ問題に直面している他のユーザーにとって役立ちます。実際には非常に単純です。その場合、デリゲート コンストラクターは静的ターゲット メソッドのパラメーターを 1 つだけ受け取ります。

例:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);
于 2015-09-20T01:53:03.560 に答える