Zło czy nie zło?Czy wywołanie metody rozszerzenia na odwołaniu "zerowym" (np. Zdarzenie bez subskrybentów) jest złe?
public static void Raise(this EventHandler handler, object sender, EventArgs args)
{
if (handler != null)
{
handler(sender, args);
}
}
// Usage:
MyButtonClicked.Raise(this, EventArgs.Empty);
// This works too! Evil?
EventHandler handler = null;
handler.Raise(this, EVentArgs.Empty);
Należy pamiętać, że ze względu na charakter metod rozszerzających, MyButtonClicked.Raise nie rzuci NullReferenceException jeśli MyButtonClicked jest null. (Np. Nie ma słuchaczy zdarzenia MyButtonClicked).
Zło czy nie?
Lepsze pytanie: przydatne czy nie? –
Jest to przydatne. Zamiast zaśmiecać setki "if (SomeEvent! = Null) SomeEvent (this, args)" wokół naszej bazy kodu, możemy zastąpić ją pojedynczą linią. –
Możesz też utworzyć "manekina obsługi" dla swojego wydarzenia, aby upewnić się, że nigdy nie jest pusta. –