Ich begann mit einer Frage, und beim Eintippen der Frage, fand die Antwort, aber anstatt zu löschen, dachte ich, es könnte hilfreich sein, A) eine Bestätigung zu bekommen, und B) anderen zu helfen.Wie kann ein EventHandler den Operator = nur in der Klasse definieren?
Wenn ich ein Ereignis habe und mehrere Orte in der Anwendung Listener hinzufügen, was ist der beste Weg, um alle Listener auf einmal zu entfernen? Zum Beispiel kann ich ...
myPage.OnPageOpened += OpenPage;
und später in meinem Code ...
myPage.OnPageOpened -= OpenPage;
Aber was, wenn ich unbekannte 3rd-Party-Abonnenten haben und ich möchte eine magische Reset-Taste drücken, die löscht alles und fängt bei Null an?
Sie können die Operatoren + = und - = an beliebiger Stelle gegen den EventHandler verwenden, da die Operatorüberladungen öffentlich sind. Der = überladene Operator ist privat und kann nur in der definierenden Klasse aufgerufen werden.
Also in der definierenden Klasse kann ich dies verwenden, um meine EventHandler zu löschen.
OnPageOpened = null;
Und diese Funktionalität zu belichten, könnte ich ...
public void ClearPageOpenedEvents() {
OnPageOpened = null;
}
Ist das richtig?
Hätte ich Reflektor installiert/geöffnet, wäre dies viel schneller/einfacher zu entdecken gewesen. – ScottCate