Warum erzeugt die Verwendung von Namensargumenten in einer Funktion tatsächlich mehr Code?

8

Beim Lesen des Jon Skeet-Buchs habe ich (einiger Zeit) die Verwendung der " Benannten Argumente " im Funktionsaufruf gefunden. Hier ist ein schnelles und einfaches Beispiel:

%Vor%

Nachdem ich es benutzt habe und später den kompilierten Code sehe, sehe ich, dass die Verwendung dieses Namens tatsächlich Variablen vor dem Aufruf der Funktion erzeugt.

Und das ist der erstellte Code:

%Vor%

und der vollständige kompilierte Code, sehen Sie, wie größer ich es nenne, indem ich die "benannten Argumente"

verwende %Vor%

Also ist das ein Punkt, den c # vergessen hat zu optimieren, oder gibt es einen anderen Nutzen von ihnen?

Nachverfolgung

Ich möchte klarstellen, dass der obige Code das ist, was die Kompilierung produziert. Hier ist, was ich mit der Antwort von Servy bekomme.

%Vor%     
Aristos 11.09.2012, 19:19
quelle

1 Antwort

8

Dies hat damit zu tun, dass der Code in der richtigen Reihenfolge ausgeführt wird. Bei benannten Argumenten müssen die Ausdrücke für jedes Argument in der Reihenfolge ausgeführt werden, in der sie im Quellcode erscheinen, und nicht in der Reihenfolge, in der sie in der eigentlichen Argumentliste der Definition erscheinen. Stellen Sie sich den (sehr gemeinen) Anruf vor:

%Vor%

sollte es genauso enden wie:

%Vor%

oder

%Vor%

Wenn Sie für jedes benannte Argument keine lokalen Variablen haben, erhalten Sie die erste, wenn Sie dies tun, erhalten Sie die zweite.

Es scheint so, als würde man nicht versuchen zu bestimmen, ob es notwendig ist, lokale Variablen zu erstellen (sind die Argumente nicht in Ordnung, verursachen sie Nebenwirkungen, sind diese Nebenwirkungen für die Ausdrücke in anderen Argumenten sichtbar), war es einfacher Erstellen Sie immer die lokalen Variablen. Es wurde bei einer Reihe von Gelegenheiten festgestellt, dass der C # -Compiler die Korrektheit gegenüber Optimierungen sicherstellen wird; Es hinterlässt Optimierungen für das JIT.

    
Servy 11.09.2012, 19:31
quelle