一、C# 是什么?------ 现代编程语言的定义
C# 是微软公司开发的现代、面向对象、类型安全的编程语言,自 2002 年发布以来,始终作为.NET 平台的主力语言,兼具 C++ 的高效性与 Java 的跨平台安全性,是构建桌面、Web、移动、游戏、云服务等全场景应用的通用语言。
C# 核心特点
- 语法简洁优雅:抛弃了 C++ 的复杂指针与内存手动管理,学习曲线平缓,对 C++/Java 开发者友好。
- 纯面向对象设计:封装、继承、多态、接口等特性完备,支持面向对象与函数式编程混合范式。
- 强类型安全:变量必须声明类型,编译期即可捕获大量错误,代码稳定性更高。
- 跨平台支持:依托.NET Core/.NET 5+,可运行于 Windows、macOS、Linux、移动端、IoT 设备等多平台。
- 丰富的编程范式:支持泛型、异步编程(async/await)、事件驱动、LINQ 查询等现代编程特性。
- 完善的工具链:Visual Studio、VS Code、Rider 等 IDE 提供强大的调试、测试、部署支持,开发效率拉满。
二、C# 与 .NET:共生的技术体系
很多新手会混淆 C# 和.NET,这里一句话理清关系:
C# 是编程语言,.NET 是它的运行平台 。C# 无法脱离.NET 单独运行,而.NET 平台也支持VB.NET、F# 等其他语言。

NET 平台全景图
从图中可以看到,.NET 平台像一个 "万能工具箱",覆盖了几乎所有主流开发场景:
| 开发领域 | 核心技术栈 |
|---|---|
| 桌面应用 | WPF / WinForms |
| Web 开发 | ASP.NET Core |
| 移动应用 | MAUI(跨平台 UI) |
| 云 / 微服务 | Orleans 分布式框架 |
| 游戏开发 | Unity(主力脚本语言) |
| 机器学习 | ML.NET |
| IoT / 嵌入式 | .NET IoT |
| 跨平台 UI | Avalonia(开源跨平台 UI 框架) |
| 数据库 ORM | EF Core(对象关系映射框架) |
而所有这些应用,都依赖最底层的 .NET 运行时 + 类库 提供基础能力支持。

三、.NET 生态的演进:从 Framework 到统一平台

1. 三大核心平台的关系
- .NET Framework :微软早期的 Windows 专属框架,仅支持 Windows 系统,包含 WinForms、WPF、ASP.NET Web Forms 等传统技术,目前已停止更新(仅维护),适合遗留 Windows 桌面应用开发。
- .NET Core:2016 年推出的开源跨平台框架,支持 Windows、macOS、Linux,轻量模块化设计,专为云原生、跨平台场景优化,是.NET Framework 的现代化重构。
- .NET 5+:微软为统一生态推出的平台,合并了.NET Core、.NET Framework、Xamarin/Mono 的能力,成为真正意义上的 "一次编写,到处运行" 的统一平台,目前最新版本为.NET 8 LTS(长期支持版)。
2. .NET Framework vs .NET Core/.NET 5+ 核心差异
| 特性 | .NET Framework | .NET Core/.NET 5+ |
|---|---|---|
| 平台支持 | 仅 Windows | Windows、macOS、Linux、移动端、IoT |
| 开源性 | 闭源(部分开源) | 完全开源,社区驱动 |
| 模块化设计 | 单体框架,API 臃肿 | 模块化组件,按需引用 |
| 性能优化 | 传统优化,性能一般 | 专为现代场景优化,性能显著提升 |
| 云原生支持 | 有限支持 | 原生支持容器、微服务、K8s |
| 跨平台 UI | 无 | MAUI、Avalonia 支持跨平台桌面 / 移动 |
四、.NET 核心概念:CTS、CLS、CLR
理解这三个概念,才能真正搞懂.NET 的底层运行逻辑:
1. IL(中间语言)
C# 代码编译后不会直接生成机器码,而是先编译为 IL(Intermediate Language,中间语言) ,存储在.exe或.dll文件中。IL 是.NET 所有语言的通用中间表示,实现了不同语言之间的互通(比如VB.NET和 C# 可以互相调用)。
2. CTS(通用类型系统)
CTS 定义了.NET 平台的通用数据类型规范,解决不同语言类型定义不统一的问题。
例:VB.NET 中的
Integer和 C# 中的int,经过 CTS 统一后,都会映射为System.Int32类型,实现跨语言类型兼容。
3. CLS(公共语言规范)
CLS 是一套编码规范,规定了.NET 语言之间互相调用的最低标准(比如不允许使用无符号类型、不区分大小写的标识符等)。只要代码遵循 CLS 规范,就可以被其他.NET 语言无障碍调用。
4. CLR(公共语言运行时)
CLR 是.NET 平台的 "大脑",负责 IL 代码的执行与管理:
- 即时编译(JIT):将 IL 代码实时编译为对应平台的机器码执行。
- 垃圾回收(GC):自动管理内存,回收不再使用的对象,避免内存泄漏。
- 类型安全检查:运行时验证类型合法性,防止非法内存访问。
- 异常处理:提供统一的异常捕获与处理机制。

五、C# 编译原理:两次编译的秘密
C# 是一种编译型语言,但它的编译过程分为两个关键阶段:
1. 第一次编译:源码 → 中间语言(IL)
- 工具:C# 编译器(Roslyn)
- 过程:语法分析 → 语义分析 → 代码优化 → 生成 IL 代码,输出
.exe(可执行文件)或.dll(类库文件)。 - 特点:这一步编译后的代码是平台无关的,无法直接运行,需要 CLR 的二次编译。
2. 第二次编译:IL → 机器码
- 工具:CLR 中的 JIT 编译器
- 过程:程序运行时,JIT 会将需要执行的 IL 代码实时编译为当前操作系统 / CPU 的机器码,然后交由 CPU 执行。
- 优势:JIT 会根据运行环境进行动态优化(比如针对特定 CPU 指令集优化),同时实现跨平台兼容。
六、C# 与 .NET 版本对应关系(核心版本)
C# 语言版本与.NET 平台版本紧密绑定,每个.NET 版本对应一个 C# 版本,带来新的语言特性:
| .NET 版本 | 对应 C# 版本 | 关键特性 |
|---|---|---|
| .NET Framework 4.x | C# 5.0 | async/await 异步编程、Caller Info |
| .NET Core 3.1 | C# 8.0 | 可空引用类型、异步流、默认接口方法 |
| .NET 5 | C# 9.0 | 记录类型(record)、init-only 属性、顶级语句 |
| .NET 6 | C# 10.0 | 文件范围命名空间、全局 using、Lambda 改进 |
| .NET 7 | C# 11.0 | 原始字符串、泛型数学、文件作用域类型 |
| .NET 8 | C# 12.0 | 主构造函数、集合表达式、别名 any 类型 |