Frage

Ich erinnere Lesen, mehrfach und an verschiedenen Orten, dass, wenn das typische Ereignis Brennen:

protected virtual OnSomethingHappened()
{
    this.SomethingHappened(this, EventArgs.Empty);
}

e sollte EventArgs.Empty sein, wenn es keine interessante Veranstaltung args ist, nicht null.

Ich habe die Führung in meinem Code gefolgt, aber ich merke, dass ich nicht klar bin, warum das ist die bevorzugte Technik. Warum hat der angegebenen Vertrag bevorzugen EventArgs.Empty über null?

War es hilfreich?

Lösung

ich glaube, die Argumentation hinter dem NOT NULL das ist, wenn als Parameter übergibt, wird nicht erwartet, dass das Verfahren, um möglicherweise benötigen eine NULL-Verweis Ausnahme zu behandeln.

Wenn Sie übergeben null, und die Methode versucht, etwas mit e zu tun, wird es eine Null-Referenz Ausnahme erhalten, mit EventArgs.Empty wird es nicht.

Andere Tipps

EventArgs.Empty ist eine Instanz der Null-Objekt Muster .

Im Grunde ein Objekt mit „keinen Wert“ darstellt, für null zu vermeiden, überprüft, wenn es verwendet wird.

Ich glaube, EventArgs.Empty verwendet wird, um die Konvention der Übergabe eines Arguments mit einem Ereignis zu halten, auch wenn keine erforderlich sind.

Mitchel Sellers geschrieben, die andere Hälfte meines Grund auf halbem Weg durch meinen Beitrag: es verhindert, dass ein NULL-Verweis Ausnahme sollte ein Verfahren versuchen und tun etwas mit diesem Argument (neben prüfen, ob es null)

.

EventArgs.Empty im Grunde macht die Arbeit eines global definierten Ereignis Argument ohne weitere Informationen.

Um ein ähnliches Beispiel für die Aufrechterhaltung einer Konvention zu geben, unser Team nutzt string.Empty eine Zeichenfolge initialisiert werden, da sonst andere Programmierer newString = ""; or newString = " "; or newString = null; verwenden könnte, die alle unterschiedliche Ergebnisse für verschiedene Kontrollbedingungen produzieren kann.

A (leicht pedantisch) Grund EventArgs.Empty vs new EventArgs() zu verwenden ist, dass erstere nicht einen neuen EventArgs nicht initialisiert werden, eine geringe Menge an Speicher zu speichern.

Wenn Sie eine Allzweck Methode sind, die die EventHandler Signatur hat, die von jedem Event-Handler genannt wird und übergeben wird sowohl die object sender und EventArgs e , kann es nennen e.ToString(), zB für Veranstaltungen anmelden, ohne sich Gedanken über eine null-Zeiger-Ausnahme.

Ich habe lange Zeit „neue EventArgs ()“ statt „EventArgs.Empty“ ... ich glaube, das wichtig, etwas zu passieren ist, die eine Null-Ausnahme nicht verursacht.

von Albahari Buch: "in order to avoid unnecessarily instantiating an instance of EventArgs."

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top