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

《C# to IL》第四章 關鍵字和操作符(下)(12)

編輯:關於C語言

這裡,變量i和j沒有被初始化。因此,這些字段沒 有在類yyy的靜態函數中被初始化。在類yyy的任何代碼被調用之前,這些變量會分派到它們的默認值,它 們依賴於它們的數據類型。在這個例子中,它們是通過int和bool類的構造函數來實現的,因為這些構造 函數會首先被調用。

a.cs

class zzz
{
public static void Main()
{
int i = 10;
string j;
j = i >= 20 ? "hi" : "bye";
System.Console.WriteLine(j);
}
}

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,class System.String V_1)
ldc.i4.s   10
stloc.0
ldloc.0
ldc.i4.s   20
bge.s      IL_000f
ldstr      "bye"
br.s       IL_0014
IL_000f: ldstr      "hi"
IL_0014: stloc.1
ldloc.1
call       void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}

Output

bye

如果把語句壓縮到單獨的一行中,那麼使用三元操作符會更加 “壯麗”。在C#中,變量i和j在轉換到IL時變成了V_0和V_1。我們首先將變量V_0初始化為10 ,隨後把條件值20放到棧上。

l 如果條件為TRUE,那麼bge.s就會執行到標號IL_0014的跳轉。

l 如果條件為FALSE,那麼程序就會進行到標號IL_000f。

然後,程序進行到WriteLine函 數,並打印出相應的文本。

從最終的IL代碼中,無法解釋原始的C#代碼是否使用一個if語句或? 操作符。C#中的大量操作符,例如三元操作符,都是從C程序語言中借用過來的。

a.cs

class zzz
{
public static void Main()
{
int i = 1, j= 2;
if ( i >= 4 & j > 1)
System.Console.WriteLine("& true");
}
}

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.0
ldc.i4.2
stloc.1
ldloc.0
ldc.i4.4
clt
ldc.i4.0
ceq
ldloc.1
ldc.i4.1
cgt
and
brfalse.s IL_001c
ldstr      "& true"
call       void [mscorlib] System.Console::WriteLine(class System.String)
IL_001c: ret
}
}

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