Telkens wanneer ik mijn eigen gebeurtenissen definieer, gebruik ik een patroon zoals het volgende (waarvan ik geloof dat is hoe de MSDN aanbeveelt doen):
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); } }
De clientcode hoeft zich dus alleen maar te abonneren op het evenement en het werkt automatisch.
voelt lastig om de parameter EventArgs e
door te geven, in het bijzonder met een klasse die EventHandler gebruikt om zijn events te verhogen, aangezien de basis EventArgs geen gegevens bevat, alleen EventArgs.Empty
.
Zou het als een faux pas worden beschouwd om het hierin te veranderen?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Reacties
Antwoord
Is het fout? Nee. Zal het ervoor zorgen dat mensen klagen over uw code? Nee.
Zal het een drukke ontwikkelaar een paar minuten op een zijspoor zetten terwijl hij probeert te achterhalen wat de parameters zijn en of ze zijn probleem zullen helpen oplossen? Zou kunnen zijn ..
Zal het uw klas gemakkelijker maken om te gebruiken …?
Standaarden en patronen zijn handig omdat ze gemakkelijk herkend en gebruikt worden (of genegeerd). Afwijken van conventies moet met een doel gebeuren, niet alleen omdat het kan. Dit is van toepassing of het nu de stijl van een haakje, parameternamen of een lijst met argumenten is. Doe het met een reden, niet alleen omdat het compileert.
PropertyChangedEventArgs
en-Handler
, en geef als argument de eigenschapnaam door? Of is dit slechts een slecht voorbeeld?