Når jeg definerer mine egne begivenheder, bruger jeg et mønster som det følgende (som jeg tror er, hvordan MSDN anbefaler 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 skal altså bare abonnere på begivenheden, og den fungerer automatisk.
Det er dog føles besværligt at overføre parameteren EventArgs e
, især med en klasse, der bruger EventHandler til at hæve sine begivenheder, da basen EventArgs ikke har nogen data til sig, kun EventArgs.Empty
.
Ville det betragtes som en falsk pas at ændre det til dette?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Kommentarer
Svar
Er det forkert? Nej. Vil det få folk til at klage over din kode? Nej.
Vil det sidetrackere en travl udvikler i et par minutter, mens han forsøger at finde ud af, hvad parametrene er, og om de kan hjælpe med at løse hans problem? Kan være ..
Vil det gøre din klasse lettere at bruge …?
Standarder og mønstre er nyttige, fordi de let genkendes og bruges (eller ignoreres). At afvige fra konventioner skal ske med et formål, ikke kun fordi du kan. Dette gælder, uanset om det er parentesstil, parameternavne eller argumentliste. Gør det af en grund, ikke kun fordi det kompilerer.
PropertyChangedEventArgs
og-Handler
, og videregive egenskabsnavnet som argument? Eller er dette bare et dårligt eksempel?