C # -Ereignislöschsyntax

8

Ich bin verwirrt über die Syntax zum Entfernen von Event-Handlern in C #.

%Vor%

Das "neue" erstellt in jeder Zeile ein neues Objekt, sodass Sie ein Objekt hinzufügen und dann bitten Sie, ein anderes Objekt zu entfernen.

Was passiert wirklich unter den Abdeckungen, dass dies funktionieren kann?
Es ist sicher nicht aus der Syntax ersichtlich.

    
Mark T 27.08.2009, 15:38
quelle

3 Antworten

19

Die + = und die - = sind Syntaxverknüpfungen für integrierte interne Methoden namens Add () und Remove (), die einen Zeiger auf eine interne verknüpfte Liste von Delegaten hinzufügen oder entfernen, die der Delegat als privates Feld hat . Wenn Sie Remove ausführen, beginnt es an dem Anfang der verknüpften Liste und untersucht jeden Delegaten in der Liste nacheinander, bis es einen findet, der "gleich" zu dem ist, den Sie an die Methode Remove () übergaben. (mit - = Syntax)

Dann entfernt es dieses aus der verknüpften Liste und patcht die verknüpfte Liste, um die Konnektivität beizubehalten ...

In diesem Kontext wird die Methode 'equals' (für eine delegate ()) überschrieben, sodass nur das Ziel des Delegaten und der methodPtr verglichen werden, die identisch sind, obwohl Sie einen neuen Delegaten erstellt haben Pass auf Entfernen ...

    
Charles Bretana 27.08.2009, 15:47
quelle
7

Der "neue MyHandler" ist eigentlich überflüssig. Sie können einfach

tun %Vor%

Alle Ereignisse in C # sind Multicast-Delegaten, daher gibt die Syntax + = und - = an, dass Sie einen Delegaten zur Liste der Delegierten hinzufügen / entfernen, die aufgerufen werden.

Was hinter den Kulissen passiert, die beste Erklärung, die ich gefunden habe, ist Jon Skeets Jon Skeet >.

    
womp 27.08.2009 15:50
quelle
-1

Sie können sich Ereignisse als Platzhaltermethoden für die delegierte Logik vorstellen, die ausgeführt wird, wenn das Ereignis ausgelöst wird. Ein einzelnes Ereignis kann mehrere Abonnenten haben (Mehrfach-Casting), also ist die Syntax + = und - = die Art, wie ein einzelner Event-Handler angehängt oder entfernt wird. Wenn Sie einfach eine Aufgabe ausführen, werden die Abonnements des Ereignisses zurückgesetzt, was zu unerwünschten Nebenwirkungen führen kann.

BEARBEITEN dieser Link erklärt mehr über das Event in C #

    
Josh E 27.08.2009 15:47
quelle

Tags und Links