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

《C# to IL》第一章 IL入門(10)

編輯:關於C語言

你將驚訝地看到由 兩個不同的編譯器所生成的輸出幾乎是相同的。我向你展示了這個示例用以證實——語言的無 關性,最終,源代碼將會被轉換為IL代碼。無論我們使用VB.Net或C#,都會調用相同的WriteLine函數。

因此,程序語言間的不同現在是表面上的問題。無休止的爭論那個語言是最優的是沒有意義的。 從而,IL使得程序員可以自由使用他們所選擇的語言。

讓我們揭開上面給出的代碼的神秘面紗。

每個VB.Net程序都需要被包括在一個模塊中。我們稱之為modmain。Visual Basic中的所有模塊都 是以關鍵字End結束的,從而我們會看到End Module。這是VB在語法上不區別於C#的地方 ——C#不理解模塊是什麼。

在VB.Net中,函數被稱為子程序。我們需要子程序來標注 程序執行的開始位置。這個子程序被稱為Main。

VB.Net代碼不僅關聯到mscorlib.dll,還使用了 文件Microsoft.VisualBasic。

在IL中會創建一個名為_vbProject的類,因為在VB中類的名稱不是 必須的。

稱為_main的函數是子函數的開始,因為它具有entrypoint偽指令。它的名稱前面有一個 下劃線。這些名稱是由VB編譯器選擇用來生成IL代碼的。

這個函數會傳遞一個字符串數組作為參 數。它具有一個自定義偽指令來處理元數據的概念。

接下來,我們具有這個函數的完整原型,以 一系列可選的字節作為終結。這些字節是元數據規范中的一部分。

模塊modmain被轉換為一個具有 相同名稱的類。和之前一樣,這個類還具有相同的偽指令.custom和一個Main函數。該函數使用了名 為.locals的偽指令在棧上創建一個只能在這個方法中使用變量。這個變量只存在於方法執行期間,當方 法停止運行時,它就會“消亡”。

字段還存儲在內存中,但是需要更長的時間來為它 們分配內存。關鍵字init表示在創建期間,這些變量應該被初始化為它們的默認值。默認值依賴於變量的 類型。數值總是被初始化為值ZERO。關鍵字init之後是這些變量的數據類型和它的名稱。

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