Delegat-Zuweisung

21/02/2009 - 18:43 von Axel | Report spam
Hallo NG,
habe auf verschiedenen Microsoft-Webseiten folgendes Code-Muster zum
Auslösen des Erignisses "Changed" entdeckt :

public class X {
public event EventHandler<EventArgs> Changed;

protected virtual void OnChanged(EvenArgs args)
{
// handler ist eine lokale Kopie !! von Changed.
// Damit wird verhindert, daß bei Änderung des Changed-Delegats
// zwischen der Prüfung auf null-Werte und dem Aufruf des
Delegaten
// z.B. eine '-=' - Zuweisung des Changed-Delegaten den Aufruf
"verfàlscht".

EventHandler<EventArgs> handler = Changed;
if (handler != null)
handler(this,EventArgs.Empty);
}
.
.
usw.
}

Das funktioniert auch ( im Debugger getestet). Aber mir stellt sich die
Frage "Wieso eigentlich ?".
Das Delegat ist doch ein Referenztyp und KEIN Wertetyp !
Also folgende Frage : Wird im Fall eines Delegaten also der
Zuweisungsoperator '=' überschrieben,
um im Fall einer Zuweisung eines Delegaten mit einem anderen Delegaten ( des
gleichen Typs )
eine Kopie des Delegaten zu erhalten ( mit sàmtlichen Eintràgen aus
Delegate.GetInvocationList() ) ?
Vielleicht kann mir ja jemand zu diesem Verstàndnisproblem weiterhelfen, da
ich dazu nichts in der .NET-
Dokumentation gefunden habe und auch internationale Web-Ressourcen nicht
geholfen haben.
mfg
axel
 

Lesen sie die antworten

#1 Stefan Hoffmann
21/02/2009 - 18:49 | Warnen spam
hallo Axel,

Axel schrieb:
if (handler != null)
handler(this,EventArgs.Empty);


Es geht darum, das nach der Prüfung auf != null und vor dem Aufruf
handler() der handler auf null gesetzt werden kann. Wenn du zuerst eine
lokale Kopie erstellst, dann kann dieser Fall nicht eintreten.


mfG

Ähnliche fragen