Kdykoli definuji své vlastní události, používám vzor, jako je následující (kterému věřím , jak doporučuje MSDN dělá to):
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); } }
Klientský kód se tedy musí přihlásit k odběru události a funguje automaticky.
Nicméně cítí se těžkopádně předat parametr EventArgs e
, zejména u třídy, která používá EventHandler ke zvýšení svých událostí, protože základní EventArgs nemá k němu žádná data, pouze EventArgs.Empty
.
Bylo by považováno za faux pas změnit to na toto?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Komentáře
Odpověď
Je to špatně? Ne. Způsobí to, že si lidé budou stěžovat na váš kód? Ne.
Bude na pár minut obejít nějakého zaneprázdněného vývojáře, zatímco se bude snažit zjistit, jaké jsou parametry a zda mu pomohou vyřešit problém? Mohlo by to být …
Usnadní používání vaší třídy …?
Standardy a vzory jsou užitečné, protože jsou snadno rozpoznatelné a použité (nebo ignorované). Odchylka od konvencí by měla být učiněna za účelem, nejen proto, že můžete. To platí, ať už se jedná o styl závorky, názvy parametrů nebo seznam argumentů. Udělejte to z nějakého důvodu, nejen proto, že se kompiluje.
PropertyChangedEventArgs
a-Handler
a předat jako argument název vlastnosti? Nebo je to jen špatný příklad?