Warum "new DelegateType (Delegate)" verwenden?

8

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.

    
user990692 12.10.2011, 04:08
quelle

5 Antworten

5

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.

    
shf301 12.10.2011, 04:13
quelle
4

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.

    
Ben Voigt 12.10.2011 04:10
quelle
4

Die zwei sind gleichwertig. Letzteres ist Syntax neu mit C # 2.0.

    
John Saunders 12.10.2011 04:11
quelle
1

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.

    
Erik Funkenbusch 12.10.2011 04:12
quelle
1

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.

    
Dylan Smith 12.10.2011 04:14
quelle

Tags und Links