Når jeg definerer mine egne begivenheder, bruger jeg et mønster som det følgende (som jeg tror er, hvordan MSDN anbefaler gør det):

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

Klientkoden skal altså bare abonnere på begivenheden, og den fungerer automatisk.

Det er dog føles besværligt at overføre parameteren EventArgs e, især med en klasse, der bruger EventHandler til at hæve sine begivenheder, da basen EventArgs ikke har nogen data til sig, kun EventArgs.Empty.

Ville det betragtes som en falsk pas at ændre det til dette?

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

Kommentarer

  • Hvad gør det ondt ved at være der? Skal du tilføje det senere, når du finder et behov for at videregive begivenhedsargumenter? Sandsynligvis …
  • Jeg tænkte kun på det som en bekvemmelighed at spare mig lidt, mens jeg skrev klassen. Men du ' har helt ret i, at det kunne ændres senere (det vandt sandsynligvis ' t, men stadig …), og det ville være en brudende ændring, så jeg kan lige så godt gøre det rigtigt første gang. Tak!
  • I dette særlige tilfælde er det ikke ' t at det er mere normalt at bruge en PropertyChangedEventArgs og -Handler, og videregive egenskabsnavnet som argument? Eller er dette bare et dårligt eksempel?
  • Min kode kan være et dårligt eksempel, men jeg trak mit design og navngav konventioner fra et par .NET-klasser, der bruger standard EventArgs og -Changed nomenklatur.

Svar

Er det forkert? Nej. Vil det få folk til at klage over din kode? Nej.

Vil det sidetrackere en travl udvikler i et par minutter, mens han forsøger at finde ud af, hvad parametrene er, og om de kan hjælpe med at løse hans problem? Kan være ..

Vil det gøre din klasse lettere at bruge …?

Standarder og mønstre er nyttige, fordi de let genkendes og bruges (eller ignoreres). At afvige fra konventioner skal ske med et formål, ikke kun fordi du kan. Dette gælder, uanset om det er parentesstil, parameternavne eller argumentliste. Gør det af en grund, ikke kun fordi det kompilerer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *