Frage

Ich bin einig alten Managed C ++ Code mit Zeilen wie diese Aktualisierung:

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

Dabei steht

  • Eventsource ist die Klasse, die Ereignisse
  • veröffentlicht
  • instanceOfEventSource ist eine Instanz der Klasse
  • Eventsource :: MyEventHandlerDelegate ist die Delegattyp für das Ereignis
  • MyEventHandlerMethod ist eine (nicht statisch) Methode innerhalb der aktuellen Klasse (von denen "this" ist eine Instanz) mit der Signatur passenden Ereignisquelle :: MyEventHandlerDelegate

Was ist die richtige Syntax für diesen in C ++ / CLI?

War es hilfreich?

Lösung

Die Syntax C # 's ähnlich ist, mit anderen Worten, += überlastet ist dies möglich zu machen:

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

In Analogie zur Entfernung. Im Gegensatz zu C #, Sie können jedoch nicht die explizite Instanziierung der Event-Handler delegieren auslassen so erzeugt dies ziemlich langatmig Code.

Andere Tipps

ich eine halbe Stunde nur damit verbracht, herauszufinden, wie man eine statische Methode als Callback-Methode für ein Ereignis zu registrieren. Während der OP war für die Registrierung von statischen Methoden nicht speziell fragen, werden diese an andere hilfreich sein, vor dem gleichen Problem. Es ist eigentlich sehr einfach, in diesem Fall der Delegat Konstruktor nur einen Parameter für die statische Zielmethode erfolgt.

Beispiel:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top