Sind EventArg Klassen benötigt, jetzt haben wir Generika
Mit Generika, gibt es überhaupt einen Grund, um spezifische abgeleitet EventArg Klassen
Wie es scheint, jetzt können Sie nutzen Sie einfach on-the-fly mit einer generischen Implementierung.
Muss ich mich durch alle meine Beispiele und mein entfernen eventArg Klassen (StringEventArgs, MyFooEventArgs, etc . .)
public class EventArgs<T> : EventArgs
{
public EventArgs(T value)
{
m_value = value;
}
private T m_value;
public T Value
{
get { return m_value; }
}
}
- Ich verstehe nicht, was Sie tun möchten, zu tun mit "EventArgs<T>" - Klasse. In der Regel verwenden "EventArgs" Klasse, und wenn Sie benötigen einige spezifische Argumente, abgeleitet aus "EventArgs" und fügen Sie die erforderlichen Eigenschaften.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie beschreiben, sind im wesentlichen Tupel, gruppierte Werte verwendet, die für einen bestimmten Zweck. Sie sind ein nützliches Konstrukt in funktionale Programmierung und unterstützen, dass der Stil sehr gut.
Den Nachteil, dass Ihre Werte werden nicht genannt, und Sie brauchen Kontext, um verstanden zu werden.
EventArgs
von Natur aus sehr Häufig konsumiert werden, weit Weg von Ihrem relevanten Kontext. Daher, Tupel-artigeEventArgs
kann sehr verwirrend für den Verbraucher.Sagen wir, wir haben ein Ereignis, einige division abgeschlossen ist, und es trägt den Zähler, Nenner und Ergebnis:
Den event-handler hat einige Mehrdeutigkeit:
Dies wäre viel übersichtlicher mit einer
EventArgs
Vertreter der Veranstaltung:Generische wiederverwendbare
EventArgs
Klassen Erleichterung der Entwicklung des Mechanismus auf Kosten von Ausdruck Absicht.Blick auf die Benutzerdefinierte Generische EventArgs Artikel geschrieben von Matthew Cochran, in diesem Artikel beschreibt er, wie man sogar weiter ausbauen mit zwei und mit drei Mitgliedern.
Über generische EventArgs haben Ihren nutzen, und natürlich deren Missbrauch, so geben Sie Informationen in den Prozess verloren.
Im folgenden Beispiel ist es Typ-sicher, aber ein bisschen mehr LOC:
Als TcKs bereits sagte: Verwenden Sie
EventArgs<T>
wenn Sie nur einen Wert, da sonst eine Ableitung vonEventArgs
(oderEventArgs<T>
, was Sie wollen).Ich denke, Tupel-Stil EventArgs nützlich sind. Genauso wie Tupel ist, können Sie missbraucht werden, aber es scheint, meine Faulheit ist stärker, dass mein Gefühl von Vorsicht. Ich habe implementiert die folgenden:
Können wie folgt verwendet werden (bei Verwendung mit einem event-raiser-Erweiterung)