Ich versuche, so viel wie möglich an die Framework Design Guidelines zu halten, selbst wenn ich Klassenbibliotheken entwerfe, die nur für den internen Gebrauch gedacht sind.Event Design Guidelines
Bis zu einem gewissen Grad macht es mir das Leben leichter, da ich mit Code Analysis die Überprüfung von Bereichen automatisiere, in denen ich möglicherweise keine Best Practices verwende.
Aber hier ist ein Fall, wo ich fühle mich sehr gezwungen, nur die Empfehlungen zu ignorieren.
Da die EventArgs-Einschränkung in .NET 4 aus EventHandler entfernt wurde, warum würde heutzutage jemand lieber eine von EventArgs abgeleitete Klasse verwenden (wie unter https://msdn.microsoft.com/en-us/library/ms229011(v=vs.110).aspx vorgeschrieben), anstatt den gewünschten Datentyp direkt zu verwenden und die Kosten für die Zuweisung eines anderen zu vermeiden Objekt und die gewünschten Daten darin einbetten?
Zum Beispiel mit dem folgenden schreiben:
public class ExceptionEventArgs : EventArgs
{
private readonly Exception _exception;
public ExceptionEventArgs(Exception exception)
{
_exception = exception;
}
public Exception Exception
{
get
{
return _exception;
}
}
}
public event EventHandler<ExceptionEventArgs>;
ist viel ausführlicher als kostet eine zusätzliche Zuweisung statt:
public event EventHandler<Exception>;
Ich habe sogar ein generisches EventArgs für auf einem anderen Klasse mit vor ein paar Wochen, aber ich fühle mich dumm, nur um der Richtlinien zu folgen.
public class EventArgs<T> : EventArgs
{
private readonly T _data;
public EventArgs(T data)
{
_data = data;
}
public T Data
{
get
{
return _data;
}
}
}
So gibt es irgendwelche Nachteile für die Verwendung von
EventHandler<NotAnEventArgsDerivedClass>
für die Klassen für die internen * Gebrauch bestimmt?
* Damit meine ich wirklich, für den Einsatz auf einem Produkt bestehend aus mehreren Baugruppen - die alle für die ausschließliche Verwendung durch das Produkt bestimmt sind.
Eine seltsame Sache, die ich in diesen Richtlinien sah: Warum wird nicht empfohlen, dass Sie Ihre eigenen Delegaten erstellen, um Ereignisse zu behandeln? –
@RodrigoVedovato: Was ist der Sinn? 'EventHandler' ist gut genug. –
SLaks
http: // Stapelüberlauf.com/questions/6816848/why-to-not-a-custom-class-statt-erben-the-eventargs-class – lukbl