Ori de câte ori îmi definesc propriile evenimente, folosesc un model precum următorul (ceea ce cred recomandă MSDN făcându-l):

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); } } 

Astfel, codul clientului trebuie doar să se aboneze la eveniment și funcționează automat.

Cu toate acestea, se simte greoi să treacă parametrul EventArgs e, în special cu o clasă care folosește EventHandler pentru a-și ridica evenimentele, deoarece EventArgs de bază nu are date, doar EventArgs.Empty.

Ar fi considerat un fals pas să-l schimbați în acest sens?

protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); } 

Comentarii

  • Ce este rău dacă ești acolo? Va trebui să-l adăugați mai târziu când veți găsi nevoia de a transmite argumentele evenimentului? Probabil …
  • M-am gândit la asta doar ca la o comoditate de a-mi economisi ceva efort în timp ce scriu cursul. Dar ' ai absolut dreptate în sensul că s-ar putea schimba mai târziu (probabil că a câștigat ' t, dar totuși …), și ar fi o schimbare de rupere, așa că aș putea să o fac bine prima dată. Mulțumim!
  • În acest caz, nu este ' mai normal să folosiți un PropertyChangedEventArgs și -Handler și treceți ca argument numele proprietății? Sau este doar un exemplu prost?
  • Codul meu ar putea fi un exemplu prost, dar îmi extrageam convențiile de design și de denumire din câteva clase .NET, care folosesc nomenclatura EventArgs și -Changed implicită.

Răspuns

Este greșit? Nu. Va determina oamenii să se plângă de codul tău? Nu.

Va evita un dezvoltator ocupat timp de câteva minute în timp ce încearcă să afle care sunt parametrii și dacă aceștia vor ajuta la rezolvarea problemei sale? Ar putea fi ..

Vă va face clasa mai ușor de utilizat …?

Standardele și modelele sunt utile deoarece sunt ușor recunoscute și utilizate (sau ignorate). Abaterea de la convenții ar trebui făcută într-un scop, nu doar pentru că poți. Acest lucru se aplică indiferent dacă este vorba despre stilul parantezelor, numele parametrilor sau lista argumentelor. Faceți-o dintr-un motiv, nu doar pentru că compilează.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *