C# 简介
语言定位、CLR/JIT/GC、以及 .NET 各版本的关系。
Key Points.NET 是平台,C# 是语言,CLR 是运行时,三者不是一回事。
三个概念
| Term | What it is |
|---|---|
| C# | 语言,语法和类型系统 |
| .NET | 平台,含运行时、基础库、SDK 工具 |
| CLR | .NET 的运行时,负责 JIT、GC、类型加载 |
| IL | 中间语言,编译器产物 |
从源码到运行
Text
Program.cs
│ csc / dotnet build
▼
Program.dll (IL + 元数据)
│ dotnet run / CLR 加载
▼
JIT 编译成机器码 → 执行JIT can optimise for the actual CPU (AVX2, runtime inlining) at the cost of warm-up. .NET 7+ also supports AOT, producing native executables with faster startup.
GC
C#
// 托管对象不用手动释放
var list = new List<int> { 1, 2, 3 };
// 出了作用域,GC 会在合适时机回收
// 非托管资源用 using 确保释放
using var file = File.OpenText("a.txt");
Console.WriteLine(file.ReadLine());C#'s GC is generational (gen 0/1/2): new objects start in gen 0 and survivors get promoted. Most die in gen 0, so collection is cheap. using handles deterministic release of file handles and connections.
版本演进
| Version | Year | Notable |
|---|---|---|
| C# 1.0 | 2002 | 基础面向对象 |
| C# 2.0 | 2005 | 泛型、可空类型 |
| C# 3.0 | 2007 | LINQ、var、lambda |
| C# 5.0 | 2012 | async/await |
| C# 8.0 | 2019 | 可空引用类型、模式匹配增强 |
| C# 9.0 | 2020 | record、顶级语句 |
| C# 12 | 2023 | 主构造函数、集合表达式 |
.NET Framework (4.8 and earlier) is Windows-only; .NET 5+ is cross-platform. New projects should target .NET 8 or later, never .NET Framework.
三个概念
| 术语 | 是什么 |
|---|---|
| C# | 语言,语法和类型系统 |
| .NET | 平台,含运行时、基础库、SDK 工具 |
| CLR | .NET 的运行时,负责 JIT、GC、类型加载 |
| IL | 中间语言,编译器产物 |
从源码到运行
Text
Program.cs
│ csc / dotnet build
▼
Program.dll (IL + 元数据)
│ dotnet run / CLR 加载
▼
JIT 编译成机器码 → 执行JIT 的好处是能针对当前 CPU 优化(比如用 AVX2 指令),也能在运行时做内联。代价是启动时有一小段预热。.NET 7+ 支持 AOT 编译,直接产出原生可执行文件,启动更快。
GC
C#
// 托管对象不用手动释放
var list = new List<int> { 1, 2, 3 };
// 出了作用域,GC 会在合适时机回收
// 非托管资源用 using 确保释放
using var file = File.OpenText("a.txt");
Console.WriteLine(file.ReadLine());C# 的 GC 是分代的(0/1/2 代):新对象在 0 代,活得久的往上升。大部分对象在 0 代就被回收,所以很快。using 负责确定性释放文件句柄、数据库连接这类非托管资源。
版本演进
| 版本 | 年份 | 标志性特性 |
|---|---|---|
| C# 1.0 | 2002 | 基础面向对象 |
| C# 2.0 | 2005 | 泛型、可空类型 |
| C# 3.0 | 2007 | LINQ、var、lambda |
| C# 5.0 | 2012 | async/await |
| C# 8.0 | 2019 | 可空引用类型、模式匹配增强 |
| C# 9.0 | 2020 | record、顶级语句 |
| C# 12 | 2023 | 主构造函数、集合表达式 |
.NET Framework(4.8 及以前)只跑 Windows;.NET 5+ 是跨平台的(Windows/Linux/macOS)。新项目一律用 .NET 8 或更新,不要用 .NET Framework。