首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 銳利體驗(二):Hello World 深度剖析 — 從原始碼到 CLR 執行全流程

     編輯:關於C語言

原始碼逐行解析


// HelloWorld.cs
using System;           // 導入 System 命名空間,簡化 Console 等類別引用
class HelloWorld {      // 類別宣告,C# 所有程式碼皆在類別內
    static void Main() { // 程式進入點:static、void、大寫 M
        Console.WriteLine("Hello World !"); // 呼叫靜態方法輸出
    }
}

Main 方法六大規範

規則說明
封裝於類別/結構C# 純物件導向,無全域函式
static無需實例即可執行
存取修飾詞不限public/private/protected 皆可,慣用 public
名稱大寫 MC# 大小寫敏感,Main 才具進入點語意
參數形式無參或 string[] args,其他形式無進入點語意
回傳型別void 或 int,其他無進入點語意

編譯輸出:PE 檔案而非原生機器碼

csc HelloWorld.cs 產生 HelloWorld.exe,實為 PE (Portable Executable) 格式,內含:

  • IL (Intermediate Language):CPU 無關指令集,如 ldstr、call、ret。
  • 中繼資料:型別定義、成員簽章、組件參考等表格集合,提供自描述與型別安全。
  • 標準 PE Header:Windows 載入器識別用(如 Win32 Header)。

IL 範例(ildasm 擷取)


.class private auto ansi beforefieldinit HelloWorld
    extends [mscorlib]System.Object
{
    .method public hidebysig static void Main() cil managed
    {
        .entrypoint
        .maxstack 8
        IL_0000: ldstr "Hello World !"
        IL_0005: call void [mscorlib]System.Console::WriteLine(string)
        IL_000a: ret
    }
    .method public hidebysig specialname rtspecialname
        instance void .ctor() cil managed
    {
        .maxstack 8
        IL_0000: ldarg.0
        IL_0001: call instance void [mscorlib]System.Object::.ctor()
        IL_0006: ret
    }
}
  • 編譯器自動加入 .ctor() 呼叫 Object.ctor()。
  • 強制繼承 System.Object。

執行流程:從 PE 到 JIT 編譯

  1. 使用者雙擊 .exe,OS 載入 PE Header。
  2. OS 跳轉至 PE Header 指定的進入點 → mscoree.dll!_CorExeMain。
  3. _CorExeMain 啟動 CLR,逐方法將 IL 即時編譯(JIT)為原生機器碼,執行並快取。
  4. GC 負責記憶體配置/回收。
  5. 程式結束,OS 卸載進程。

關鍵啟示

  • C# 程式不直接執行,而是在 CLR 管理下 JIT 執行。
  • IL + 中繼資料實現「一次編譯、到處執行」與語言互操作。
  • 理解 PE/IL/CLR 三角關係是進階 C# 開發的基石。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved