C# はマシンコードに直接コンパイルされるわけではありません。プラットフォーム非依存のバイトコードである IL(Intermediate Language、中間言語)にコンパイルされ、CLR がそれを実行します。その際、JIT(Just-In-Time)コンパイルを用いて実行時に IL をネイティブのマシンコードへ変換します。AOT(Ahead-Of-Time)はビルド時にネイティブコードへコンパイルする代替手段です。
実行パイプライン
C# source (.cs)
│ C# compiler (roslyn)
▼
IL bytecode (in a .dll/.exe assembly) ← platform-INDEPENDENT intermediate code
│ CLR loads it; JIT compiles IL → native code AT RUNTIME (per method, as called)
▼
Native machine code → executes on the CPU
