2010-12-15 7 views
10

Ich habe über das Schlüsselwort yield gelesen, als ich auf ein Beispielkapitel von C# in der Tiefe stieß: http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx.Wie ist es möglich, C# -Code nach der Kompilierung/Optimierung zu sehen?

Der erste Codeblock verwendet das Schlüsselwort yield, um einen einfachen Iterator zu erstellen. Aber der zweite Codeblock zeigt diesen Code, nachdem der Compiler damit zurechtgekommen ist. Unter anderem hat es die yield Anweisung in eine Zustandsmaschine explodiert.

Mehrere andere Beispiele für Code, der vom Compiler modifiziert wird, sind auf der Seite ersichtlich.

Meine Frage ist: War der Autor tatsächlich in der Lage, auf den Code nach der Kompilierung zuzugreifen, oder hat er abgeleitet, wie er aussehen würde?

+0

Reflector ist dein Freund –

+1

Die wirkliche Antwort auf diese Frage sollte "Allzu leicht!" –

+0

Reflektor ist wirklich dein Freund. –

Antwort

13

Sie einen Blick mit Reflektor haben kann, das ist wahrscheinlich die beste Wahl:

http://reflector.red-gate.com

+0

Gerade heruntergeladen, danke für den Tipp! Wird die Nicht-Pro-Version weiterhin in VS integriert? –

4

Wahrscheinlich beides. Es ist ziemlich einfach, kompilierte Assemblys unter Verwendung von Reflector rückzuentwickeln. Und die C# -Sprachspezifikation, die definiert, wie verschiedene syntaktisch-zuckerhaltige Dinge kompiliert werden, ist ein öffentliches Dokument. Der Autor hätte beide Ansätze oder eine Mischung aus beidem verwenden können.

4

Schauen Sie sich ildasm an, um sich die kompilierte IL anzusehen.

(Wirklich, ist es viel Spaß, wenn Sie in Ihrem Auge bekommen)

8

Der Autor selbst erwähnt:

Offensichtlich ist der Compiler tatsächlich nicht produzieren C#, aber ich habe verwendet Reflector zu dekompilieren der Code als C#.

im selben Absatz, betitelt High Level Überblick: Was ist das Muster?

+0

Wow. Das ist der Grund, warum Sie Artikel nicht so weit bringen werden. Vielen Dank! –

+4

@SimpleCoder - Sie müssen in der Lage sein ** scharf ** zu sehen, wenn Sie möchten ** C# **, mein Freund =). – BeemerGuy

Verwandte Themen