什麼是 C#
C# 專為微軟 .NET Framework 平台設計,讀音為「See Sharp」。
微軟需要一套統一、完全物件導向的整合開發框架,消除舊技術弊病,為此著手打造全新程式執行環境與開發工具鏈。
經過20多年的發展,C#已經從原本僅支援Windows系統,演變為現今可跨多平台執行的程式語言。
如今 C# 搭配 .NET 已是完整跨平台解決方案,可用於開發 Windows、macOS、Linux、Android 應用程式;同時它也是絕大多數雲端系統優先採用的執行時環境
得益於微軟長期大力投入維護,C# 版本迭代速度相當快速,2022 年推出第 7 版。C# 依舊能夠相容二十年前撰寫的舊程式碼,新版本語法更簡潔優雅、程式結構更加精簡。截至2026年,現行版本已是第 15 版。
C# 版本發展簡史(節錄)
- C# 1.0(2001):正式公開發布
- C# 2.0(VS2005):泛型、迭代器、匿名方法
- C# 3.0(VS2008):擴充方法、Lambda、LINQ(語言整合查詢)
- C# 4.0(2010):具名 / 選擇性參數、dynamic動態型別、TPL 平行工作函式庫,完整發揮多核心處理器效能
- C# 5.0:原生支援 async/await 非同步任務
- C# 6.0:字串插值、運算式主體成員、屬性簡寫語法
- C# 7.0~7.3:Tuple 多重回傳值、簡化out參數、模式比對、非同步Main方法
- C# 8.0/9.0/10.0:記錄型別(不可變參考型別)、頂層陳述式(不需撰寫Main進入點)、預設介面方法、靜態區域函式、非同步可釋放型別、全語言範圍模式比對
- C#11 (.NET7):原始字串、泛型數學、required 必要屬性
- C#12 (.NET8):主建構子、集合簡寫語法、內嵌陣列
- C#13 (.NET9):部分屬性、擴充索引子、迭代器ref區域變數
- C#14 (.NET10):泛型別名、深度集合比對、SIMD 語法糖
Windows 仍舊是 C# 的核心開發平台,但透過 .NET Runtime,程式碼可直接在 Linux 等系統執行,實現一次撰寫、多系統部署。
.NET框架
.NET Framework 於2002年首次推出
.NET Framework 解決前代開發技術的各種痛點,核心優勢如下:
- 多裝置平台相容:可執行於伺服器、個人電腦、PDA、行動裝置等各式硬體;
- 遵循業界標準:原生支援 XML、HTTP、SOAP、JSON、WSDL 通用通訊協定;
- 安全沙箱機制:針對來源不可信的程式碼提供獨立安全執行隔離。
.NET Framework 三大核心組成
- CLR 共通語言執行平台(執行環境) 管控程式完整生命週期運作:記憶體管理與垃圾回收、程式碼安全驗證、執行緒排程、例外處理。
- 開發工具套件 整合開發環境、多語言.NET編譯器(C#/VB.NET/F#等)、偵錯工具、ASP.NET/WCF 網頁後端技術。
- BCL 基礎類別庫(又稱 FCL 框架類別庫) 內建海量通用類別,開發者可直接呼叫使用。
.NET 相較傳統 Windows 開發的升級重點
統一物件導向體系
CLR、BCL、C# 深度整合,提供單一標準OOP模型,桌面、行動裝置、網頁、分散式程式共用同一套開發範式,跨裝置語法與邏輯完全一致。
自動垃圾回收 GC
CLR 內建垃圾回收器,自動釋放不再使用物件佔用的記憶體;開發者無需手動釋放記憶體、排查記憶體洩漏,大幅降低維護難度。
多維度互通相容性
- 跨.NET語言互通:不同.NET語言撰寫的類別可互相呼叫、繼承,平台不綁定單一程式語言;
- P/Invoke 平台呼叫:直接呼叫原生 Win32 C 語言 DLL 介面;
- COM 相容支援:.NET元件與傳統COM元件可雙向互相呼叫。
部署流程簡化:無需依賴登錄檔,最簡單場景直接複製檔案即可執行程式;
並存組件機制:同一台裝置可共存多個版本DLL,各程式綁定自身編譯對應的函式庫版本,解決DLL版本衝突問題。
型別安全驗證 CLR(共通語言執行平台)強制檢查參數、資料型別,就算跨語言元件互動也會維持型別安全,阻擋非法記憶體存取行為。
完備的 BCL 基礎類別庫
內建大量通用工具類別
- 檔案操作、字串處理、加密安全等基礎工具;
- 串列、字典、雜湊表等集合容器;
- 多執行緒、同步並行處理工具;
- XML 文件讀寫處理類別
- ……
所有通用底層邏輯都已預先實作,開發者僅需撰寫業務專屬邏輯,重複使用成熟工具,避免重複開發基礎功能

此為.NET程式執行流程圖,你撰寫的原始程式碼會編譯成中間語言IL,IL可呼叫BCL提供的函式庫,最後交由CLR執行。
C#和.NET的關係
.NET Framework:一套完整開發 & 執行平台,包含兩大核心元件
- CLR(共通語言執行平台):負責程式記憶體管理、執行、安全驗證
- BCL(基礎類別庫):海量通用工具程式碼(檔案、網路、介面、並行處理等)
C#:一種程式語言,專門為.NET平台設計,用來撰寫可在CLR上執行的程式碼
除了C#,還有其他程式語言支援.NET,例如F#、VB.NET。
.NET框架的設計目標是實現跨平台、跨語言。跨平台代表可在不同作業系統執行;跨語言代表不同語言開發的元件能夠互相存取呼叫。
編譯為共通中繼語言(CIL)
所有.NET語言的編譯器讀取原始程式檔,輸出名為組件(assembly)的輸出檔案
組件分為兩類:可執行程式(exe)或動態連結函式庫(DLL)
組件內部的程式並非CPU原生機器碼,而是一種稱為共通中繼語言(Common Intermediate Language,CIL)的中介程式碼。
一份組件主要包含以下三類內容:
- 程式的CIL指令程式碼
- 程式中所有型別的中繼資料
- 參考外部其他組件相依關係的中繼資料
這套中間語言的縮寫隨.NET發展有所變更,不同技術文件會使用不同名稱。像是中間語言(IL)、微軟中間語言(MSIL),實際上全部指代CIL

編譯為原生機器碼並執行
CIL不會預先轉換為原生機器碼,僅有程式執行時,CLR會依序執行3個步驟:
- 驗證組件安全資訊
- 分配執行所需記憶體空間
- 交由JIT編譯器分段轉譯為原生機器碼
JIT 隨選編譯機制
只有實際執行到的程式區段才會進行編譯,編譯完成後快取重複使用;未被呼叫的程式不會編譯,同一區段程式僅編譯一次。
組件 (CIL + 型別資訊) → CLR (JIT 編譯器) → 原生機器碼 → 作業系統服務
CLR 託管執行職責
CIL轉換為原生程式碼後,CLR自動負責:垃圾記憶體回收、陣列越界偵測、參數型別驗證、例外錯誤處理。
託管程式與非託管程式
- 託管程式碼:.NET語言撰寫的程式,執行流程依賴CLR控管
- 非託管程式碼:不受CLR管理,例如原生C/C++ Win32 DLL
現今微軟已推出AOT預先編譯技術,可直接將C#完整編譯成本地原生程式,作法類似C++,不需安裝.NET執行環境就能直接執行EXE執行檔
NGen 工具
離線預先將組件編譯成本地原生映像檔,程式執行時可跳過JIT編譯步驟,大幅縮短開啟速度。
.NET Core AOT 為新一代預編譯方案,可產生完全無執行環境依賴的獨立原生執行檔
Assembly (Type Info, CIL)
↓
JIT Compiler
↓
Native Code
↓
Operating System Services
不論原始程式使用哪一種開發語言,都會遵循同一套編譯與執行流程
每種語言都配有專屬編譯器,VB.NET有VB.NET專用編譯器、C#有C#專用編譯器。所有編譯器都會將自身語言程式轉換為CIL,再交由JIT轉譯為原生機器碼,最後交給CPU執行。這就是為什麼.NET開發的軟體需要安裝.NET執行環境,和Java必須安裝JRE的道理相同。
flowchart TD
subgraph Compile_Time
A[C# Source] --> B[C# Compiler]
B --> C[Assembly CIL]
D[VB Source] --> E[VB Compiler]
E --> C
F[Xyz.NET Source] --> G[Xyz.NET Compiler]
G --> C
end
subgraph Run_Time
C --> H[JIT Compiler]
H --> I[Native Code]
I --> J[Operating System Services]
end上圖為各語言編譯、執行流程示意圖
共通語言執行平台(CLR)
CLR 是 .NET Framework 的核心元件,執行於作業系統上層,負責管控所有程式執行流程
- 自動垃圾回收(GC)
- 透過基礎類別庫(BCL)實作安全驗證與身分認證
- 提供豐富完整的開發功能,包含Web服務、資料存取服務等機制
flowchart TD
subgraph Unmanaged_Code
A[Non-.NET Program] --> OS[Operating System]
end
subgraph Managed_Code
B[Assembly] --> CLR[Common Language Runtime]
C[Assembly] --> CLR
D[Assembly] --> CLR
subgraph CLR[Common Language Runtime]
M[Memory Management] --- E[Exception Handling]
G[Garbage Collection] --- R[Reflection Services]
J[JIT Compiler] --- L[Class Loader]
S[Security Services]
end
CLR --> OS
end共通語言基礎架構(CLI)
每一種程式語言都內建一組基礎原生型別,用來表示整數、浮點數、字元等各類資料。
共通語言基礎架構(CLI) 是一套標準規範集合,將.NET Framework所有元件整合為統一、具互通性的完整體系。
舉例來說,整數佔用的二進位位元長度,在所有相容語言中皆採用統一標準。
flowchart TD
subgraph CLI[CLI]
CLR[Common Language Runtime] --- CLS[Common Language Specification]
BCL[Base Class Library] --- MDS[Metadata Definition & Semantics]
CTS[Common Type System] --- CIL[Common Intermediate Language]
end多數開發者不需深究CLI完整規範,但務必熟練掌握CTS 共通型別系統與CLS 共通語言規範。
CTS 共通型別系統
- 定義一套標準基礎資料型別,各型別屬性固定不變;
- 各.NET語言自有的資料型別,都會對應映射至這套標準型別的子集;
- 系統內所有型別全部繼承自根基底類別
object; - 這套統一標準讓系統內建型別、開發者自訂型別,可跨任意.NET語言互相呼叫使用。
CLS 共通語言規範
定義所有相容.NET的語言必須遵守的統一規則,涵蓋資料型別、類別建構、參數傳遞等跨語言互動約束。
.NET與.NET Framework的差異
.NET是微軟現代跨平台開發平台,而.NET Framework是早期僅限Windows執行的執行時與函式庫套件。所有新功能僅會持續在.NET開發更新,.NET Framework已進入維護週期,僅釋出安全性修補程式。
.NET具備完整跨平台能力,也是目前微軟主力維護開發的產品。後續內容將以.NET作為主要解說對象。
| 特性 | .NET | .NET Framework |
|---|---|---|
| 平台支援 | 跨平台(Windows、Linux、macOS、容器、透過MAUI支援行動裝置) | 僅支援Windows |
| 開發狀態 | 持續更新(.NET 5 → .NET 10,年度發布、提供LTS長期支援) | 維護模式(4.8為最終版本,僅釋出安全修補) |
| 執行效能 | 啟動速度更快、處理吞吐量更高、垃圾回收機制經過改良 | 效能偏舊、高度依賴Windows原生API |
| 適用場景 | 全新專案:Web API、微服務、雲原生應用、跨平台桌面/行動程式 | 舊有專案:Web Forms、WCF、Windows Workflow等 |
| 部署方式 | 完整支援Docker、容器化、雲端主機環境 | 不支援容器,依賴Windows Server伺服器 |
| 支援語言 | C#、F#、VB.NET(完整跨平台執行) | C#、VB.NET(僅限Windows) |
.NET 和 .NET Framework 的差異其實不大。兩者都支援 C#、F#、VB.NET 等程式語言,核心語法維持一致。多數場景下,你撰寫的C#程式碼可同時在.NET Framework與新式.NET(Core/5/6/7/8…)上編譯執行。
兩者的差異主要集中在可用函式庫,而非語法本身。
.NET Framework內建的WCF、Web Forms、Windows Workflow,在新式.NET中已被移除或替換。
新式.NET新增Span<T>、ValueTask、Records等現代API,這些功能在舊版.NET Framework無法使用。
由於.NET Framework僅限Windows單一平台,新式.NET為跨平台架構,因此.NET移除部分Windows專屬函式庫。舉例:System.Drawing在Windows可正常使用,但跨平台版.NET會標註為僅Windows支援。若要在跨平台.NET開發繪圖功能,無法使用System.Drawing,需改用第三方函式庫,例如Google開發的SkiaSharp
請注意以上差異都屬於框架層面;以C#這類語言層面來看,兩者幾乎沒有區別,你撰寫的C#語法在兩套環境完全通用。真正的核心差異在於函式庫與執行環境,也就是可呼叫的API不完全相同。
C#和.NET