《C# to IL》第三章 选择和循环
2009-06-01 08:31:05 来源:WEB开发网Output
hi
在编程语言中,if-else语句是极其容易理解的,但是在IL中它却是相当令人困惑的。IL检查栈上的值是1还是0。
l 如果栈上的值是1,正如这个例子中的那样,它调用带有参数hi的WriteLine函数,并随后使用无条件跳转指令br,跳转到标号IL_001d。
l 如果栈上的值是0,代码跳转到IL_0013,并且WriteLine函数会打印出false。
从而,为了在IL中实现if-else结构,需要一个有条件跳转和一个无条件跳转。如果我们使用多个if-else语句,那么IL代码的复杂度就会动态增加。
现在,可以看出编译器的编写者的智商了。
a.cs
class zzz
{
public static void Main()
{
}
void abc( bool a)
{
if (a)
{
int i = 0;
}
if ( a)
{
int i = 3;
}
}
}
a.il
.assembly mukhi {}
.class public auto ansi zzz extends [mscorlib]System.Object
{
.field private int32 x
.method public hidebysig static void vijay() il managed
{
.entrypoint
ret
}
.method private hidebysig instance void abc(bool a) il managed
{
.locals (int32 V_0,int32 V_1)
ldarg.1
brfalse.s IL_0005
ldc.i4.0
stloc.0
IL_0005: ldarg.1
brfalse.s IL_000a
ldc.i4.3
stloc.1
IL_000a: ret
}
}
C#编程语言就更复杂了。在内部的一组括号中,我们不能创建之前已经在外部创建的变量。上面的C#程序在语法上是正确的,因为括号都是在同一级别上。
- ››Illustrator CS6 打造孔雀花纹的字体
- ››TOscilloscope 仿Windows任务管理器CPU使用记录组...
- ››Illustrator教程:设计制作几何花瓣LOGO
- ››Illustrator实例教程:漂亮证卡变幻线的制作
- ››Illustrator文字教程:制作漂亮质感描边字
- ››Illustrator鼠绘:渐变工具运用绘制金属闹钟
- ››Illustrator鼠绘:教你画一个可爱卡通宝宝教程
- ››Illustrator简单四步做透明气泡教程
- ››Illustrator教程:制作漂亮的新货吊牌
- ››Illustrator教程:改变圆角矩形中一个圆角半径
- ››Illustrator教程:如何用网格工具绘制花瓣
- ››Illustrator涂抹命令打造文字草图特效
更多精彩
赞助商链接