Ok, angenommen, Sie definieren einen Delegaten in einer Klasse.
%Vor%und eine andere Klasse implementiert eine Methode:
%Vor%In dem Buch, das ich lese "Programmierung C #" 4. ed sie erstellen Delegierte mit dem new Schlüsselwort, zB:
%Vor%Allerdings kann man die Delegate-Methode auch auf diese Weise aufrufen
%Vor%Was ist der Unterschied? Warum möchte ich einen Objektdelegaten instanziieren und erstellen, wenn ich einfach nur die Signatur des Methodendelegaten übergeben oder auf sie verweisen kann.
Es besteht absolut kein Unterschied zwischen den beiden Aussagen. writer = DelegateImplementer.StringWriter;
erstellt immer noch ein delegate
-Objekt; Der Compiler wird das new ClassDelegate.StringDelegate ()
für Sie generieren. Es ist nur eine sauberere Syntax, die in C # 2.0 hinzugefügt wurde .
Wie @Ben Voigt in seiner Antwort erwähnt, ist nur in C # 2.0 erforderlich, wo der Compiler den Typ des Delegaten nicht ableiten kann, wenn Control.Invoke () zum Beispiel.
Manchmal kann der korrekte Typ nicht abgeleitet werden (wie wenn Sie ein generisches aufrufen), in solch einem Fall müssen Sie dem Compiler mitteilen, welche Art von Delegat Sie wollen.
In den meisten Fällen ist die Benennung der Methodengruppe jedoch einfacher und klarer.
Die zwei sind gleichwertig. Letzteres ist Syntax neu mit C # 2.0.
Beide sind gleich, aber die letztere Syntax wurde in C # 2 hinzugefügt, um die Verwendung der Delegierten zu vereinfachen.
Beide Methoden kompilieren zu demselben Byte-Code.
Es ist syntaktischer Zucker. Letztlich machen beide Code-Sets dasselbe.
Ich würde auch bemerken, dass .Net eine Reihe von generischen Delegaten eingebaut hat, die Ihnen viel Code sparen können. In diesem Fall würde ich tun:
%Vor%Auf diese Weise müssen Sie nicht einmal Ihren eigenen Delegaten erstellen.