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

《C# to IL》第二章 IL基礎(9)

編輯:關於C語言

上面的代碼用來顯示靜態變量的值。.cctor函數將靜態變量初 始化為值10。然後,字符串{0}會被存儲到棧上。

ldsldfa函數加載棧上某個數據類型的靜態變量 的地址。然後,和往常一樣,進行裝箱。上面給出的關於box功能的解釋,在這裡也是相關的。

IL 中的靜態變量的工作方式和實例變量相同。唯一的區別是它們有自己的一套指令。像box這樣的指令需要 棧上的一塊內存位置,這在靜態變量和實例變量之間是沒有區別的。

a.il

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

Output

0

在前面的程序中,唯一的變化是我們移除了靜態構造函數。所有 的靜態變量和實例變量都會被初始化為ZERO。因此。IL不會生成任何錯誤。在內部,甚至在靜態函數被調 用之前,字段i就會被分配一個初始值ZERO。

a.cs

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

a.il

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

Output

10

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