📌 第一部分:C# 概览与定位
1.1 定义与全称
C#(读作 "C Sharp")是一种面向对象的、类型安全的通用编程语言,由 Anders Hejlsberg 领导开发,微软于 2000 年随 .NET Framework 一起发布。C# 的名称灵感来源于音乐中的 "升 C"(C♯),寓意 "比 C++ 更进一步"。
1.2 核心定位
C# 的核心定位是 现代、优雅、高性能的通用编程语言。它结合了:
- C++ 的性能和底层控制能力
- Java 的跨平台和内存管理(GC)
- Visual Basic 的开发效率
- 函数式语言的优雅特性(Lambda、LINQ)
1.3 主要应用领域
- 游戏开发: Unity 游戏引擎(全球最流行的游戏引擎,C# 为主要语言)
- 企业级 Web 应用: ASP.NET Core 构建的高性能 Web API 和微服务
- 云原生应用: Azure 云平台的官方语言
- 桌面应用: WPF、WinForms、MAUI(跨平台)
- 移动应用: Xamarin / MAUI(iOS + Android)
- 机器学习: ML.NET 框架
- 物联网(IoT): .NET IoT 库
- 区块链: 部分区块链项目使用 C#
- AR/VR: Unity 的 AR/VR 开发
1.4 知名案例
- Unity 游戏引擎: 全球 70%+ 的移动游戏使用 Unity + C#
- Stack Overflow: 全球最大的开发者问答社区,使用 C# + ASP.NET
- Microsoft Azure: 微软云平台的核心服务使用 C#
- GitHub: 部分后端服务使用 C#
- 腾讯: 部分游戏和业务系统使用 C#
- JetBrains Rider: 跨平台 IDE,使用 C# 开发
📜 第二部分:C# 的历史与发展演进
2.1 诞生背景(2000年)
Anders Hejlsberg(Delphi 之父)于 1996 年加入微软,领导开发了 C# 语言。C# 的诞生是为了配合微软的 .NET 战略——统一的开发平台。2000 年,C# 与 .NET Framework 1.0 一同发布。
2.2 关键版本里程碑
- C# 1.0(2002年): 第一个正式版本,基础面向对象特性
- C# 2.0(2005年): 泛型、匿名方法、可空类型、迭代器
- C# 3.0(2007年): 重大革新——LINQ、Lambda 表达式、扩展方法、匿名类型、自动属性
- C# 4.0(2010年): 动态类型、命名参数、可选参数、协变/逆变
- C# 5.0(2012年): async/await 异步编程
- C# 6.0(2015年): 字符串插值、空值传播、异常过滤器
- C# 7.0(2017年): 元组、模式匹配、本地函数、ref 返回
- C# 8.0(2019年): 可空引用类型、异步流、默认接口方法
- C# 9.0(2020年): 记录(Record)、顶级语句、模式匹配增强
- C# 10.0(2021年): 结构化日志、常量字符串插值、泛型属性
- C# 11.0(2022年): 原始字符串、泛型数学支持、静态抽象成员
- C# 12.0(2023年): 集合表达式、主构造函数、Lambda 默认参数
- C# 13.0(2024年): params 集合、扩展类型、新的锁 API
2.3 重要里程碑:.NET Core 开源
- 2014年: 微软宣布 .NET Core 开源
- 2016年: .NET Core 1.0 发布,支持跨平台
- 2020年: .NET 5.0 发布(统一了 .NET Core 和 .NET Framework)
- 现在: .NET 每年 11 月发布新版本,每 2-3 年一个 LTS 版本
2.4 设计哲学
- 类型安全: 强类型系统,编译期检查
- 语言创新: 不断引入现代编程范式(函数式、异步、元编程)
- 开发者体验: 语法糖让代码简洁优雅
- 跨平台: .NET Core 支持 Windows、Linux、macOS
- 向后兼容: 新版本保持对老代码的兼容
⚙️ 第三部分:核心语法与语言特性
3.1 基础语法
- 程序入口:
static void Main(string[] args) 或 public static int Main()
- 顶级语句(C# 9+): 无需 Main 方法,直接写代码
- 命名空间:
namespace MyApp { ... }
- using 指令:
using System;
- 注释:
//、/* */、///(XML 文档注释)
// 顶级语句示例(C# 9+)
using System;
Console.WriteLine("Hello, World!");
3.2 数据类型
- 值类型: 存储在栈上
- 整数:
sbyte、byte、short、ushort、int、uint、long、ulong
- 浮点数:
float、double、decimal(高精度)
- 字符:
char(2 字节,Unicode)
- 布尔值:
bool
- 结构体:
struct
- 枚举:
enum
- 引用类型: 存储在堆上
- 类(
class)、接口(interface)、委托(delegate)
- 字符串(
string)、数组([])
- 记录(
record,C# 9+)
- 可空值类型:
int? nullable = null;
- 可空引用类型(C# 8+):
string? nullableString = null;
3.3 面向对象编程
- 类与对象:
public class Person { ... }
- 单继承:
class Student : Person
- 多接口实现:
class Admin : Person, ILoggable, ISerializable
- 抽象类:
abstract class Animal
- 接口:
interface IFlyable(支持默认方法,C# 8+)
- 访问修饰符:
public:任何地方可见
protected:本类及子类可见
internal:同程序集可见
private:仅本类可见
protected internal:同程序集或子类可见
private protected:同程序集内子类可见(C# 7.2+)
- 构造函数:
public Person(string name) { ... }
- 属性:
public string Name { get; set; }(自动属性)
- 静态成员:
static 关键字
- 密封类:
sealed class 禁止继承
- 记录(Record): 值语义的不可变数据结构(C# 9+)
// 记录示例(C# 9+)
public record Person(string Name, int Age);
var person = new Person("Alice", 30);
var person2 = person with { Age = 31 }; // 拷贝并修改
3.4 异常处理
- try-catch-finally:
try { ... } catch (Exception ex) { ... } finally { ... }
- using 语句: 自动释放实现了
IDisposable 的资源
- 自定义异常: 继承
Exception 类
// using 语句示例
using (var reader = new StreamReader("file.txt")) {
string content = reader.ReadToEnd();
}
3.5 集合与 LINQ
- 泛型集合:
List<T>:动态数组
Dictionary<TKey, TValue>:键值对
HashSet<T>:不重复集合
Queue<T>、Stack<T>
- LINQ(语言集成查询):
- 查询语法:
from n in numbers where n > 5 select n
- 方法语法:
numbers.Where(n => n > 5).Select(n => n * 2)
// LINQ 示例
var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evens = numbers.Where(n => n % 2 == 0);
var doubled = evens.Select(n => n * 2);
var sum = doubled.Sum();
3.6 异步编程
- async/await: C# 5.0 引入,简化异步编程
- Task: 表示异步操作
- Task<T>: 有返回值的异步操作
- 异步流(C# 8+):
IAsyncEnumerable<T>
// async/await 示例
public async Task<string> FetchDataAsync() {
var httpClient = new HttpClient();
var response = await httpClient.GetStringAsync("https://api.example.com");
return response;
}
3.7 模式匹配(C# 7+)
- is 表达式:
if (obj is int i) { Console.WriteLine(i); }
- switch 表达式:
var result = x switch { 1 => "One", 2 => "Two", _ => "Other" };
- 位置模式:
if (point is (0, 0))
- 属性模式:
if (person is { Name: "Alice", Age: > 18 })
3.8 高级特性
- 委托与事件: 类型安全的函数指针
- Lambda 表达式:
x => x * 2
- 扩展方法: 为已有类型添加新方法
- 索引器:
this[int index]
- 运算符重载:
public static MyClass operator +(MyClass a, MyClass b)
- 反射: 运行时获取类型信息
- 特性(Attributes): 元数据注解
- Source Generator(C# 9+): 编译时代码生成
🏗️ 第四部分:.NET 运行时与生态
4.1 .NET 平台架构
- CLR(公共语言运行时): 类似 JVM,管理内存、GC、JIT 编译
- BCL(基础类库): 标准库,提供常用功能
- JIT 编译: 热点代码编译为机器码
- AOT 编译(Native AOT,.NET 7+): 预编译为原生代码
- GC: 分代垃圾回收,低延迟优化
4.2 核心生态
- Web 框架:
- ASP.NET Core: 高性能 Web API 框架
- Blazor: WebAssembly 前端框架
- SignalR: 实时通信框架
- ORM 框架:
- Entity Framework Core: 官方 ORM(类似 Hibernate)
- Dapper: 轻量级 SQL 映射
- NHibernate: 老牌 ORM
- 游戏引擎:
- Unity: 全球最流行的游戏引擎
- Godot: 开源游戏引擎(C# 支持)
- 跨平台 UI:
- MAUI: .NET 多平台应用 UI(iOS/Android/Windows/macOS)
- WPF: Windows 桌面应用
- WinForms: 传统 Windows 桌面应用
- 构建工具:
- MSBuild: 官方构建系统
- Visual Studio / VS Code: 官方 IDE
- NuGet: 包管理器
🌟 第五部分:C# 的独特优势与特点
5.1 语言特性领先
C# 是语言创新的引领者——LINQ、async/await、模式匹配、记录、源生成器等都是 C# 率先引入或普及的。
5.2 高性能
在 TechEmpower Web 框架性能测试中,ASP.NET Core 常年位居第一梯队,性能超过 Java 和 Go 的很多框架。
5.3 跨平台
.NET Core / .NET 5+ 支持 Windows、Linux、macOS,甚至 Arm 架构。
5.4 优秀的工具链
Visual Studio 是全球最强大的 IDE 之一,VS Code 也提供了优秀的 C# 支持。
5.5 游戏开发生态
Unity + C# 是全球游戏开发者的首选组合,超过 70% 的移动游戏使用 Unity。
5.6 微软生态整合
Azure 云平台、Windows 桌面、Xbox、Hololens 等都深度整合 C#。
⚖️ 第六部分:C# 与其他语言对比
6.1 C# vs Java
- C#: 语言特性更现代、性能更高(某些场景)、微软生态
- Java: 生态更开放、跨平台更广、就业岗位更多
- 建议: 微软生态用 C#,开放生态用 Java
6.2 C# vs C++
- C#: 开发效率高、自动内存管理(GC)、更安全
- C++: 无 GC、性能更高、硬件级控制
- 建议: 游戏逻辑用 C#,游戏引擎底层用 C++
6.3 C# vs Go
- C#: 语言特性更丰富、生态更完整、框架更多
- Go: 更简洁、并发模型更优、云原生
- 建议: 复杂业务用 C#,简单微服务用 Go
6.4 C# vs Python
- C#: 性能更高、类型安全、适合大型系统
- Python: 开发效率高、AI/数据科学生态强
- 建议: 企业应用用 C#,AI/数据用 Python
🧠 第七部分:学习建议
1
基础入门
C# 基础语法、数据类型、控制流、面向对象基础、集合、LINQ
2
.NET 核心
.NET 运行时、GC、异常处理、异步编程(async/await)
3
框架与实战
ASP.NET Core Web API、Entity Framework Core、依赖注入
4
高级方向
微服务、容器化、Blazor、MAUI、Unity 游戏开发、性能调优
推荐书籍与资源
- 《C# 图解教程》—— 最适合入门的 C# 书籍
- 《C# 编程语言》—— 语言规范详解
- 《ASP.NET Core 实战》—— Web 开发实战
- 《CLR via C#》—— .NET 底层原理
- 《Unity 游戏开发》—— 游戏开发入门
- Microsoft Learn: 官方免费教程
- Stack Overflow: 全球最大的编程问答社区
学习路径建议
- 前 2 个月: 基础语法 + 面向对象 + LINQ
- 2-4 个月: ASP.NET Core + EF Core + Web API 开发
- 4-8 个月: 微服务 + Docker + 性能优化
- 1 年后: 根据兴趣选择游戏开发、前端(Blazor)或架构方向
🎯 总结升华
C# 是软件工程领域的全栈语言。
它不像 C++ 那样复杂,不像 Java 那样保守,C# 在 性能、语言特性、开发效率、工具链 之间取得了完美的平衡。
从 Web 后端(ASP.NET Core)到游戏开发(Unity),从桌面应用(WPF/MAUI)到移动应用(Xamarin/MAUI),从云原生(Azure)到物联网(IoT),C# 几乎覆盖了软件开发的每一个领域。
"C# 是微软最成功的编程语言,也是全球开发者最喜爱的语言之一。" 💎
—— Stack Overflow 开发者调查报告
🔖 相关标签
#游戏开发
#Unity
#企业级应用
#ASP.NET Core
#云原生
#跨平台
#桌面应用
📄 本文档为 C# 完整白皮书 · 最后更新于 2026年06月28日