Welcome

首页 / 软件开发 / C# / 《C# to IL》第四章 关键字和操作符(上)

《C# to IL》第四章 关键字和操作符(上)2011-09-22 博客园 包建强位于return语句之后的代码是不会被执行的。在下面给出的第1个程序中,你将发现在C#中有一个 WriteLine函数调用,但是在我们的IL代码中却看不到。这是因为编译器意识到任何return之后的语句都 不会被执行,从而,也就不用将其转换到IL中了。

a.cs

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

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
br.s IL_0002
IL_0002: ret
}
}

编译器不会在编译从不执行的代码上浪费时间,而是在遇到这种情形时生成一个警告。

a.cs

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

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ret
}
.method private hidebysig specialname rtspecialname instance void .ctor(int32 i) il managed
{
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ldstr "hi"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}