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

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

 2009-06-01 08:31:09 来源:WEB开发网   
核心提示: Output zzzs zzzi 上面这个例子的主要意图是,验证首先初始化变量还是首先调用包含在构造函数中的代码,《C# to IL》第二章 IL基础(10),IL输出非常清晰地证实了——首先初始化所有的变量,然后再调用构造函数中的代码, 随后,C#编译器调用正确的

Output

zzzs

zzzi

上面这个例子的主要意图是,验证首先初始化变量还是首先调用包含在构造函数中的代码。IL输出非常清晰地证实了——首先初始化所有的变量,然后再调用构造函数中的代码。

你可能还会注意到,基类的构造函数会被首先执行,随后,也只能是随后,在构造函数中编写的代码才会被调用。

这种收获肯定会增强你对C#和IL的理解。

a.cs

    class zzz
    {
        public static void Main()
        {
            System.Console.WriteLine(10);
        }
    }

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldc.i4.s 10
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
}

Output

10

通过重载WriteLine函数,我们能够打印出一个数字而不是字符串。

首先,我们使用ldc语句把值10放到栈上。仔细观察,现在这个指令是ldc.i4.s,那么值就是10。任何指令都在内存中获取4个字节,但是当以.s结尾时则只获取1个字节。

随后,C#编译器调用正确的WriteLine函数的重载版本,它从栈上接受一个int32值。

这类似于打印出来的字符串:

a.cs

    class zzz
    {
        public static void Main()
        {
            System.Console.WriteLine("{0}", 20);
        }
    }

上一页  5 6 7 8 9 10 

Tags:to IL 第二章

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