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

  • Hva skader det å være der? Må du legge den tilbake senere når du finner et behov for å sende hendelsesargumenter? Sannsynligvis …
  • Jeg tenkte bare på det som en bekvemmelighet å spare meg litt arbeid mens jeg skrev timen. Men du ' har helt rett i at den kunne endres senere (den vant sannsynligvis ' t, men fortsatt …), og det ville være en bruddendring, så jeg kan like godt gjøre det riktig første gang. Takk!
  • I dette tilfellet er det ikke ' t det er mer normalt å bruke en PropertyChangedEventArgs og -Handler, og sende egenskapens navn som argument? Eller er dette bare et dårlig eksempel?
  • Koden min kan være et dårlig eksempel, men jeg hentet design- og navngivningskonvensjonene fra noen .NET-klasser, som bruker standard EventArgs og -Changed nomenklatur.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *