Aina määritellessäni omia tapahtumiani käytän seuraavanlaista mallia (jota uskon MSDN suosittelee sen tekeminen):

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

Asiakaskoodin on siis vain tilattava tapahtuma ja se toimii automaattisesti.

Se kuitenkin tuntuu hankalalta siirtää EventArgs e -parametri etenkin luokan kanssa, joka käyttää EventHandleria tapahtumiensa nostamiseen, koska EventArgs-perusasemalla ei ole siihen tietoja, vain EventArgs.Empty.

Pitäisikö faux-passi vaihtaa se tähän?

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

Kommentit

  • Mitä sattuu olemalla siellä? Täytyykö sinun lisätä se takaisin myöhemmin, kun huomaat tarpeen siirtää tapahtuman argumentit? Luultavasti …
  • Ajattelin sitä vain mukavuutena säästää itselleni vaivaa kirjoittaessani luokkaa. Mutta ' olet täysin oikeassa siinä, että se voi muuttua myöhemmin (se todennäköisesti voitti ' t, mutta silti …), ja se olisi murtava muutos, joten voin myös tehdä sen oikein ensimmäistä kertaa. Kiitos!
  • Tässä tapauksessa ei ' ole normaalia käyttää PropertyChangedEventArgs ja -Handler ja välitätkö argumenttina ominaisuuden nimen? Vai onko tämä vain huono esimerkki?
  • Koodini saattaa olla huono esimerkki, mutta vedin suunnittelu- ja nimityskäytäntöni muutamasta .NET-luokasta, jotka käyttävät oletusarvoisia EventArgs- ja -Changed-nimikkeistöä.

Vastaa

Onko se väärin? Ei. Saako se ihmisiä valittamaan koodistasi? Ei.

Aikooko se seurata kiireistä kehittäjää muutaman minuutin ajan yrittäessään selvittää parametrit ja auttavatko ne ratkaisemaan hänen ongelmansa? Voi olla ..

Onko se helpompaa luokkasi käytössä …?

Standardit ja mallit ovat hyödyllisiä, koska ne tunnistetaan ja käytetään helposti (tai ohitetaan). Sopimuksista poikkeaminen tulisi tehdä tarkoitusta varten, ei vain siksi, että voit. Tämä pätee riippumatta siitä, onko kyseessä hakasulkutyyli, parametrien nimet tai argumenttiluettelo. Tee se syystä, ei vain siksi, että se kääntyy.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *