1-
我們用C#、VB.NET語言編寫的代碼最終都會被編譯成程序集或IL。因此用VB.Net編寫的代碼 可以在C#中修改,隨後在COBOL中使用。因此,理解IL是非常有必要的。
一旦熟悉了IL,理解.NET 技術就不會有障礙了,因為所有的.NET語言都會編譯為IL。IL是一門中性語言。IL是先發明的,隨後才有 了C#、VB.Net等語言。
我們將在一個短而精辟的程序中展示IL。我們還假設讀者至少熟悉一 門.Net語言。
a.il
.method void vijay()
{
}
隨後,我們用IL編寫了一個非常短小的IL程序——它顯然是不能工作的,並 將它命名為a.il。那麼我們怎麼才能把它編譯為一個可執行程序呢?不需要為此而焦急,Microsoft提供 了一個ilasm程序,它的唯一任務就是從IL文件中創建可執行文件。
在允許這個命令之前,要確保 你的變量路徑被設置為framework中的bin子目錄。如果不是,請輸入命令如下:
set path=c:\progra~1\microsoft.Net\frameworksdk\bin;%PATH%
現在,我們使用如下命令:
c:\il>ilasm /nologo /quIEt a.il
這樣做會生成下面的錯誤:
Source file is ANSI
Error: No entry point declared for executable
***** FAILURE *****
將來,我們將不會顯示由ilasm生成的輸出的第一行 和最後一行。我們還將移除非空白行之間的空白行。
在IL中,允許我們使用句點.作為一行的開始 ,這是一條指令,要求編譯器執行某個功能,如創建一個函數或類,等等。任何開始於句點的語句都是一 條實際俄編譯器指令。
.method表示創建一個名為vijay的函數(或方法),並且這個函數返回 void,即它不返回任何值。因為缺少較好的命名法則,函數名稱vijay顯得很隨意。
匯編器顯然理 解不了這個程序,從而會顯示“no entry point”的消息。這個錯誤信息的生成是因為IL文件 能夠包括無數的函數,而匯編器無法區分哪個會被首先被執行。
在IL中,首先被執行的函數被稱 為進入點(entrypoint)函數。在C#中,這個函數是Main。函數的語法是,名稱之後是一對圓括號()。 函數代碼的開始和結束用花括號{}來表示。
a.il
.method void vijay()
{
.entrypoint
}
c:\il>ilasm /nologo /quIEt a.il
Source file is ANSI
Creating PE file
Emitting members:
Global Methods: 1;
Writing PE file
Operation completed successfully