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
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.
PropertyChangedEventArgs
ja-Handler
ja välitätkö argumenttina ominaisuuden nimen? Vai onko tämä vain huono esimerkki?