2 Stimmen

Wie kann man einen Event-Handler eines anderen Objekts für ein anderes Objekt deregistrieren?

Ich habe 3 Objekte. Objekt A hat ein Ereignis X, das andere Objekte abonnieren können. Objekt B registriert sich für das Ereignis X von Objekt A.

Wie kann ich Objekt B aus dem X-Ereignis von Objekt A aus Objekt C heraus deregistrieren?

1voto

Jon Skeet Punkte 1325502

Der Sinn von Ereignissen besteht darin, dass sie den Pub/Sub-Teil abkapseln, so dass niemand sonst daran herumpfuschen kann.

Wenn Sie (Objekt C) nun die ganze Zeit als Stellvertreter für Objekt B fungieren können, ist das eine andere Sache. Wenn Sie Ihr eigenes Ereignis veröffentlichen, das Objekt B abonniert, anstatt dass es Objekt A abonniert - und wenn Sie Objekt A abonnieren im Namen von Objekt B, dann gibt es verschiedene Möglichkeiten, sich von Objekt A abzumelden. Aber welches "Recht" haben Sie, sich in die Ereignisbehandlungsroutinen eines anderen Codes einzumischen, wenn Sie nicht an diesem Prozess beteiligt waren?

EDIT: Um auf Ihre Überlegungen einzugehen: Wenn Sie die entsprechenden Rechte haben, können Sie peut in der Lage sein, ein Feld zu finden, das das Ereignis unterstützt. Zu diesem Zeitpunkt können Sie es direkt untersuchen - aber das bedeutet immer noch nicht, dass Sie wissen, welche Handler hinzugefügt wurden von Objekt B . Sie könnten Handler-Methoden finden, die sich innerhalb des Typs Objekt B oder eines verschachtelten Typs befinden, aber diese müssen nicht von Objekt B hinzugefügt worden sein - und Objekt B könnte Handler aus anderen Klassen angehängt haben. Im Grunde gibt es nichts zu sagen, "wer" ein Ereignis abonniert hat - nur was der Handler ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X