Frage

Vor ein paar Jahren Las ich ein Buch, das beschrieb, wie könnte man das überschreiben der Standard-event-dispatcher-Umsetzung in .Internet mit Ihrem eigenen Prozessor.

    class foo {
       public event EventHandler myEvent;
       ...
    }

    ...
      myFoo.myEvent += myBar1.EventHandler;
      myFoo.myEvent += myBar2.EventHandler;

Wenn das Ereignis ausgelöst wird, sowohl myBar1 und myBar2-Handler aufgerufen wird.

Soweit ich mich erinnere, dass die Standardimplementierung dieser Schleife wird eine verknüpfte Liste und einfach iteriert über die Liste, und fordert die EventHandler-Delegaten in Ordnung.

Meine Frage ist zweifach:

  1. Hat jemand wissen, welches Buch ich lese?
  2. Warum würden Sie wollen, überschreiben Sie die default-Implementierung (die möglicherweise beantwortet werden in dem Buch)?

Edit:Das Buch, das ich bezog, war in der Tat Jeffrey Richter CLR via C#

War es hilfreich?

Lösung

Es hätte eines von vielen Büchern oder Artikeln im web.

Es gibt verschiedene Gründe, warum könnten Sie wollen, um zu ändern, wie Ereignisse sind abonnierte/abgemeldete:

  • Wenn Sie haben viele Veranstaltungen, von denen viele wohl noch nicht abonniert haben, können Sie verwenden möchten EventHandlerList geringere Speicherauslastung
  • Sie können sich anmelden möchten Anmeldung/Abmeldung
  • Sie möchten möglicherweise verwenden Sie eine schwache Referenz zu vermeiden, die der Abonnent die Lebensdauer von gebunden zu Ihnen
  • Möchten Sie vielleicht ändern Sie die Verriegelung im Zusammenhang mit zur Anmeldung/Abmeldung

Ich bin sicher, es gibt mehr - diese sind aus der Spitze von meinem Kopf :)

EDIT:Beachten Sie auch, dass es einen Unterschied zwischen einer custom-Umgang mit zur Anmeldung/Abmeldung und eine benutzerdefinierte Weise der Auslösung des Ereignisses (die nennen darf GetInvocationList und garantieren, dass alle Handler aufgerufen werden, unabhängig davon, Ausnahmen, zum Beispiel).

Andere Tipps

Ich glaube mich zu erinnern, etwas ähnliches in Jeffrey Richter CLR via C#. Edit: Ich auf jeden Fall tun, denken Sie daran, dass er geht ins detail über es.

Es gibt ein paar verschiedene Gründe, die für die Kontrolle des event-Registrierung.Einer von Ihnen ist code zu reduzieren aufblasen, wenn Sie haben TONNEN von Veranstaltungen.Ich denke, Jeffrey ging in diese im detail in dem Buch...

  1. Keine
  2. Sie könnten zum Beispiel brauchen, um zu brechen die Aufruf-Kette basierend auf dem Ergebnis einer von den Handlern.Sagen Sie Ihre CustomEventArgs-Objekt hat eine Eigenschaft 'Gesperrt', die, wenn Sie auf true gesetzt unterdrückt alle weiteren event-handler aufrufen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top