3 Stimmen

Sollte ich die Aktion nach dem Anbringen wieder lösen?

Ich füge eine solche Aktion im Konstruktor hinzu:

model.DataArrived += new Action<List<ConsoleData>>(model_DataArrived);

Soll ich sie in der OnDispose ? Ist es in Ordnung, eine neue Instanz auf diese Weise zu erstellen?

protected override void OnDispose()
    {
        model.DataArrived -= new Action<List<ConsoleData>>(model_DataArrived);

Oder sollte ich genau die gleiche Instanz, die ich im Konstruktor erstellt habe, abtrennen? Sollte ich diese Instanz in einem privaten Feld nur zum Zwecke der Abtrennung aufbewahren?

3voto

SLaks Punkte 832502

Das ist in Ordnung.
Delegierte werden nach Wert verglichen, nicht nach Referenz.

のことです。 Delegate.Remove Methode, und die entsprechende - Operator, entfernen Sie die letzte passend zu Delegaten aus dem ersten Operanden.

Sie müssen den Handler überhaupt nur entfernen, wenn model wird länger leben als Ihr Objekt. Wenn dies der Fall ist, wird das Ereignis in model behält einen Verweis auf Ihr Objekt, wodurch Ihr Objekt zu lange am Leben gehalten wird.

1voto

Henk Holterman Punkte 249753

Sollte ich es in OnDispose abtrennen?

Ja. Andernfalls würde die Modellinstanz verhindern, dass diese Instanz gesammelt wird.

Und als Slaks antwortete, war die -= Notation ist in Ordnung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X