WEB开发网
开发学院软件开发C语言 《C# to IL》第二章 IL基础 阅读

《C# to IL》第二章 IL基础

 2009-06-01 08:31:09 来源:WEB开发网   
核心提示:-2-如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码,《C# to IL》第二章 IL基础,本章和下面两章将关注于此, 我们将用一个短小的C#程序来揭开IL的神秘面纱,不再啰嗦,这就开始我们的冒险之旅,并解释由编译器生成的IL代码,这样

-2-

如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码。本章和下面两章将关注于此。

我们将用一个短小的C#程序来揭开IL的神秘面纱,并解释由编译器生成的IL代码。这样,我们就可以“一箭双雕”:首先,我们将揭示IL的奥妙,其次,我们将会更加直观地理解C#编程语言。

我们将首先展示一个.cs文件,并随后通过C#编译器以IL编写一个程序。它的输出和cs文件是相同的。输出将会显示IL代码。这会增强我们对C#和IL的理解。好吧,不再啰嗦,这就开始我们的冒险之旅。

a.cs

class zzz
{
    public static void Main()
    {
        System.Console.WriteLine("hi");
        zzz.abc();
    }

    public static void abc()
    {
        System.Console.WriteLine("bye");
    }
}

      c:il>csc a.cs

      c:il>ildasm /output=a.il a.exe

a.il

//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.0.2204.21
//  Copyright (C) Microsoft Corp. 1998-2000
 
// VTableFixup Directory:
// No data.
.subsystem 0x00000003
.corflags 0x00000001
.assembly extern mscorlib
{
  .originator = (03 68 91 16 D3 A4 AE 33 )                   // .h..3
  .hash = (52 44 F8 C9 55 1F 54 3F 97 D7 AB AD E2 DF 1D E0
           F2 9D 4F BC )                            // RD..U.T?.O.
  .ver 1:0:2204:21
}
.assembly a as "a"
{
  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::
// .ctor(bool, bool) = ( 01 00 00 01 00 00 )
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module a.exe
// MVID: {3C938660-2A02-11D5-9089-9752D1D64E03}
.class private auto ansi zzz
       extends [mscorlib]System.Object
{
  .method public hidebysig static void Main() il managed
  {
    .entrypoint
    // Code size       16 (0x10)
    .maxstack  8
    IL_0000:  ldstr      "hi"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(class System.String)
    IL_000a:  call       void zzz::abc()
    IL_000f:  ret
  } // end of method zzz::Main
 
  .method public hidebysig static void abc() il managed
  {
    // Code size       11 (0xb)
    .maxstack  8
    IL_0000:  ldstr      "bye"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(class System.String)
    IL_000a:  ret
  } // end of method zzz::abc
 
  .method public hidebysig specialname rtspecialname
          instance void .ctor() il managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method zzz::.ctor
 
} // end of class zzz
 
//*********** DISASSEMBLY COMPLETE ***********************
      上面的代码是由IL反汇编器生成的。

1 2 3 4 5 6  下一页

Tags:to IL 第二章

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接