Når jeg definerer mine egne hendelser, bruker jeg et mønster som følgende (som jeg tror er slik MSDN anbefaler gjø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); } }
Dermed trenger klientkoden bare å abonnere på hendelsen, og den fungerer automatisk.
Imidlertid, den føles tungvint å overføre parameteren EventArgs e
, spesielt med en klasse som bruker EventHandler til å heve hendelsene sine, siden basen EventArgs ikke har data til den, bare EventArgs.Empty
.
Ville det betraktes som en faux pas å endre det til dette?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Kommentarer
Svar
Er det feil? Nei. Vil det føre til at folk klager over koden din? Nei.
Kommer det til å spore en travel utvikler i et par minutter mens han prøver å finne ut hva parameterne er, og om de vil bidra til å løse problemet hans? Kan være ..
Vil det gjøre klassen enklere å bruke …?
Standarder og mønstre er nyttige fordi de lett gjenkjennes og brukes (eller ignoreres). Avvik fra stevner bør gjøres for et formål, ikke bare fordi du kan. Dette gjelder enten det er parentesstil, parameternavn eller argumentliste. Gjør det av en grunn, ikke bare fordi den kompilerer.
PropertyChangedEventArgs
og-Handler
, og sende egenskapens navn som argument? Eller er dette bare et dårlig eksempel?