程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 《C# to IL》第三章 選擇和循環(13)

《C# to IL》第三章 選擇和循環(13)

編輯:關於C語言

continue語句控制for循環到達結束位置。當if語句結果為TRUE時,程序將繞過 WriteLine函數而跳轉到循環的結束。然後,代碼將在標號IL_0010繼續執行,這裡,變量V_0的值會增加1 。

在break和continue語句之間的主要區別如下所示:

l 在break語句中,程序會跳出循環 。

l 在continue語句中,程序繞過剩下的語句,跳轉到循環的結尾。

goto語句也能到達相 同的功能。從而,break語句、continue語句或goto語句,在轉換為IL時,都會被轉換為相同的br指令。

下面的程序示范了C#中的goto語句會被直接轉換為IL中的br語句。

a.cs

public class zzz
{
public static void Main()
{
goto aa;
aa: ;
}
}

a.il

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

C#中一個簡單的goto語句,會被轉換為IL中的br指令。在C#這樣的語言中使用goto被認 為是不恰當的,但是,它在IL中的等價物——br指令,對於實現諸如if語句、循環等各種結構 而言,卻是極其有用的。因此,在編程語言中的禁忌,在IL中卻是極其有用的。

a.cs

public class zzz
{
public static void Main()
{
int j;
for ( int i = 1; i <= 2 ; i++)
System.Console.Write(i);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (int32 V_0,int32 V_1)
ldc.i4.1
stloc.1
br.s       IL_000e
IL_0004: ldloc.1
call       void [mscorlib]System.Console::Write(int32)
ldloc.1
ldc.i4.1
add
stloc.1
IL_000e: ldloc.1
ldc.i4.2
ble.s      IL_0004
ret
}
}

Output

12

這個例子解釋了for循環。我們在Main函數中創建了一個變量j ,在for語句中創建了一個變量i。在C#中,這個變量i只在for循環中是可見的。因此,這個變量的作用域 是受限制的。

但是,轉換到IL時,所有的變量都具有相同的作用域。這是因為,變量作用域的概 念對IL而言有所不同。因此,取決於C#編譯器所執行的變量作用域規則。因此,我們能判斷出 ——所有的變量在IL中具有相同的作用域和可見性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved