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

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

編輯:關於C語言

靜態構造函數總是在任何其它代碼執行之前被調用 。在C#中,靜態函數只是一個和類具有相同名稱的函數。在IL中,函數名稱改變為.cctor。因此,你可能 注意到在先前的例子中,我們使用了一個名為ctor的函數(而不需要事先定義)。

無論我們何時 調用一個無構造函數的類時,都會自動創建一個沒有參數的構造函數。這個自動生成的構造函數具有給定 的名稱.ctor。這一點,應該增強我們作為C#程序員的能力,因為我們現在正處在一個較好的位置上來理 解那些深入實質的東西。

靜態函數會被首先調用,之後,帶有entrypoint偽指令的函數會被調用 。

a.cs

class zzz
    {
        public static void Main()
        {
            System.Console.WriteLine("hi");
            new zzz();
        }
        zzz()
        {
            System.Console.WriteLine("bye");
        }
    }

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldstr "hi"
call void System.Console::WriteLine(class System.String)
newobj instance void zzz::.ctor()
pop
ret
}
.method private hidebysig specialname rtspecialname instance void .ctor() il managed
{
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ldstr "bye"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}

Output

hi

bye

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