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

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

編輯:關於C語言
面這個例子的主要意圖是,驗證首先初始化變 量還是首先調用包含在構造函數中的代碼。IL輸出非常清晰地證實了——首先初始化所有的變 量,然後再調用構造函數中的代碼。

你可能還會注意到,基類的構造函數會被首先執行,隨後, 也只能是隨後,在構造函數中編寫的代碼才會被調用。

這種收獲肯定會增強你對C#和IL的理解。

a.cs

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

a.il

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

Output

10

通過重載WriteLine函數,我們能夠打印出一個數字而不是字符 串。

首先,我們使用ldc語句把值10放到棧上。仔細觀察,現在這個指令是ldc.i4.s,那麼值就是 10。任何指令都在內存中獲取4個字節,但是當以.s結尾時則只獲取1個字節。

隨後,C#編譯器調 用正確的WriteLine函數的重載版本,它從棧上接受一個int32值。

這類似於打印出來的字符串:

a.cs

class zzz
    {
        public static void Main()
        {
            System.Console.WriteLine("{0}", 20);
        }
    }

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)
ldstr "{0}"
ldc.i4.s 20
stloc.0
ldloca.s V_0
box [mscorlib]System.Int32
call void [mscorlib]System.Console::WriteLine(class System.String,class System.Object)
ret
}
}

Output

20

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