När jag definierar mina egna händelser använder jag ett mönster som följande (som jag tror är hur MSDN rekommenderar gör det):
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); } }
Klientkoden behöver alltså bara prenumerera på händelsen och den fungerar automatiskt.
Men den känns besvärlig att skicka EventArgs e
-parametern, särskilt med en klass som använder EventHandler för att höja sina händelser, eftersom basen EventArgs inte har några data till sig, bara EventArgs.Empty
.
Skulle det betraktas som en faux pas att ändra det till detta?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Kommentarer
Svar
Är det fel? Nej. Kommer det att få folk att klaga på din kod? Nej.
Kommer det att spåra någon upptagen utvecklare i ett par minuter medan han försöker ta reda på vad parametrarna är och om de hjälper till att lösa hans problem? Kan vara ..
Kommer det att göra din klass enklare att använda …?
Standarder och mönster är användbara eftersom de lätt känns igen och används (eller ignoreras). Att avvika från konventioner bör göras för ett syfte, inte bara för att du kan. Detta gäller oavsett om det är parentesstil, parameternamn eller argumentlista. Gör det av en anledning, inte bara för att den kompilerar.
PropertyChangedEventArgs
och-Handler
och skicka egenskapens namn som argument? Eller är detta bara ett dåligt exempel?