Erstellen von benutzerdefinierten Ereignissen - Object Sender oder Typed Sender?

8

Ich habe die Archive durchsucht und viele Fragen dazu, was der Absender ist und warum Sie das Muster verwenden sollten, aber ich habe nichts über ein benutzerdefiniertes Ereignis und den -Typ falls Absender

Angenommen, ich erstelle eine benutzerdefinierte Klasse namens Subscription, die ISubscription implementiert und einige Ereignisargumente namens SubscriptionEventArgs. Wenn das Abonnement ein Ereignis mit dem Namen "Geändert" hatte, was an der Ereignissignatur geändert wurde (ISubscription sender, SubscriptionEventArgs e)?

Ein kleiner Code, um die Frage zu leiten:

%Vor%

Wenn Sie die Aktion anstelle von "EventHandler" verachten, können Sie dasselbe tun, aber mit einem benutzerdefinierten generischen "EventHandler".

%Vor%

Als Reaktion auf die Anfrage von Hans nach einem Beispiel-Event-Handler:

%Vor%

Das Nachschlagen des Abonnements in der Liste mag trivial erscheinen, aber was passiert, wenn ich mit sehr großen Datenmengen arbeite und neue Datenmengen über einen Echtzeit-Stream in der Anwendung ankommen. Die Kosten, die man haben muss, um eine Referenz aus einer Liste zu bekommen oder die Schritte des Casting zu durchlaufen, machen keinen Sinn. Sie haben uns Generics in 2.0 gegeben, um dieses Problem zu lösen, also verstehe ich nicht, warum wir auch keinen generischen Event-Handler bekommen haben, und das hat mich dazu gebracht zu fragen, was mit einem generischen Event-Handler falsch ist?

    
Ryan Pedersen 10.07.2010, 19:14
quelle

1 Antwort

0

Ich bin eigentlich ziemlich verwirrt, warum MS beim Entwerfen des .Net Framework v2 kein EventHandler genau so geliefert hat, wie Sie es beschrieben haben - mit den TSender und TEventArgs als beiden generischen Argumenten. (In v1 und v1.1, da sie keine Generika hatten, verstehe ich vollständig, warum sie nicht Tausende von zusätzlichen Delegattypen erstellt haben, um alle möglichen Ereignisse zu behandeln.) Wenn ich mich richtig erinnere, kann man immer noch einen verallgemeinerten Handler verwenden um ein bestimmtes Ereignis zu hören:

%Vor%

Da Sie den Beobachter dem Observablen nicht aussetzen, sehe ich nicht, wie dies ein Problem sein könnte; Sie verhindern lediglich, dass Sie "nur für den Fall" eine Typüberprüfung durchführen müssen, sobald Sie den Ereignishandler erreicht haben. Ich denke, es wäre eine fantastische Übung, auch wenn es ein bisschen nicht standardisiert ist, da MS sich dafür entschieden hat, es nicht aufzunehmen.

Wie in meinem Kommentar oben erwähnt, würde ich die folgende Definition von EventHandler bevorzugen, so dass Sie wirklich immer eine sehr verallgemeinerte Handler-Methode als mein Codebeispiel verwenden könnten:

%Vor%     
Matt DeKrey 10.07.2010, 22:38
quelle