C# 不是 C 語言。 C# 是微軟設計的 **純面向對象、托管運行時 (CLR)、垃圾回收、類型安全** 的現代語言,僅在**語法風格**上借鑒了 C/C++ (大括號、分號、運算符、控制流)。
| 維度 | C 語言 | C# |
|---|---|---|
| 範式 | 面向過程 (可模擬 OO) | **純面向對象** (一切皆對象,含基本類型) |
| 內存管理 | 手動 malloc/free | **自動 GC** (分代/標記-壓縮/並發),IDisposable 模式輔助非托管資源 |
| 指針 | 核心特性,*/& 任意操作 | **默認禁止**,僅 unsafe 上下文允許,受嚴格限制 |
| 類型系統 | 靜態弱類型 (隱式轉換多) | **靜態強類型** (泛型/協變/逆變/模式匹配/記錄類型) |
| 編譯模式 | 源碼 → 機器碼 (AOT) | 源碼 → IL (中間語言) → JIT/AOT (運行時編譯) |
| 運行時依賴 | 無 (獨立可執行文件) | **.NET Runtime / .NET Core / Mono** (Framework 依賴) |
| 異常處理 | 無 (返回碼/errno/setjmp) | **結構化異常** (try/catch/finally/throw/when 過濾) |
| 泛型 | 無 (宏/void* 模擬) | **運行時泛型** (類型實例化/約束/协变逆变) |
| 元編程 | 預處理器 (文本替換) | **反射/特性/表達式樹/Source Generators** (C# 9+) |
| 互操作 | 原生 ABI | **P/Invoke (DllImport)** / COM / WinRT / C++/CLI |
// 相同點
int x = 10;
if (x > 0) { x--; }
for (int i=0; i(b)?(a):(b))
// C#: public static T Max(T a, T b) where T : IComparable => a.CompareTo(b)>0?a:b;
「開高檔轎車 (C#) 不必先學開面包車 (C)」,但「會開面包車再開轎車」能理解引擎/變速箱/底盤原理,遇到故障能修、能優化。
**選擇取決於你要去的地形**:高速公路 (應用層) 選 C#,越野/賽道 (系統層) 選 C。