Immer wenn ich meine eigenen Ereignisse definiere, verwende ich ein Muster wie das folgende (von dem ich glaube, dass vom MSDN empfohlen wird dies tun):
public class MyEventClass { private bool _value; // Backing variable public bool Value { get { return _value; } set { if (value != _value) // Only raise event if value is changed/different { _value = value; OnValueChanged(EventArgs.Empty); } } } public event EventHandler ValueChanged; // Anything can subscribe to the event protected void OnValueChanged(EventArgs e) // Only this and children can invoke event { if (ValueChanged != null) ValueChanged(this, e); } }
Daher muss der Client-Code das Ereignis nur abonnieren und es funktioniert automatisch.
Es funktioniert jedoch Es ist umständlich, den Parameter EventArgs e
zu übergeben, insbesondere bei einer Klasse, die EventHandler zum Auslösen ihrer Ereignisse verwendet, da die Basis-EventArgs keine Daten enthalten, sondern nur .
Wäre es ein Fauxpas, dies zu ändern?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Kommentare
- Was tut es weh, dort zu sein? Müssen Sie es später wieder hinzufügen, wenn Sie Ereignisargumente übergeben müssen? Wahrscheinlich …
- Ich habe es nur als eine Annehmlichkeit angesehen, mir beim Schreiben der Klasse etwas Mühe zu sparen. Aber Sie ' haben absolut Recht, dass es später geändert werden könnte (es wird wahrscheinlich ' t, aber immer noch …), und es wäre eine bahnbrechende Veränderung, also kann ich es genauso gut gleich beim ersten Mal richtig machen. Danke!
- In diesem speziellen Fall ist es nicht ' normaler, eine
PropertyChangedEventArgs
und-Handler
und als Argument den Eigenschaftsnamen übergeben? Oder ist dies nur ein schlechtes Beispiel? - Mein Code ist möglicherweise ein schlechtes Beispiel, aber ich habe meine Entwurfs- und Namenskonventionen aus einigen .NET-Klassen gezogen, die die Standard-Nomenklatur EventArgs und -Changed verwenden.
Antwort
Ist es falsch? Wird es Leute dazu bringen, sich über Ihren Code zu beschweren? Nein.
Wird es einen vielbeschäftigten Entwickler für ein paar Minuten ablenken, während er versucht herauszufinden, welche Parameter vorliegen und ob sie zur Lösung seines Problems beitragen? Könnte sein ..
Erleichtert es die Verwendung Ihrer Klasse …?
Standards und Muster sind nützlich, da sie leicht erkannt und verwendet (oder ignoriert) werden können. Abweichungen von Konventionen sollten zu einem bestimmten Zweck erfolgen, nicht nur, weil Sie dies können. Dies gilt unabhängig davon, ob es sich um einen Klammerstil, Parameternamen oder eine Argumentliste handelt. Tun Sie dies aus einem bestimmten Grund, nicht nur, weil es kompiliert wird.