[深入解析C#] 第1章:CLR和各种.Net的区别
C#——第1章:C#进化历史
定位:了解C#发展史和底层原理,而非现代的规范指南
注意:书中最新提到的C#版本是C#8,而现在 2026年3月21日 15:49 是C#14,需要注意对比新特性和新语法
笔记仅作为要点和思路记录,复盘时可借助AI扩充或原书参考
关于标注:
📦为了解扩展的内容,❗️为重要必会的内容
第三版的序
看到一段有意思的描写,感觉看到了一个人的变化(部分是我没错了)
世上有两类钢琴家。
一类钢琴家弹琴并不是因为他们喜欢,而是因为父母强迫他们上钢琴课。另一类钢琴家弹琴是因为他们喜欢音乐,想创作音乐。他们不需要被强迫,相反,他们陶醉其中,时常忘记什么时候要停下来。
后一类人中,有人是把弹钢琴当作一种爱好。而有人则是为了生活,因此更需要投入、技巧和天赋。他们有一定的灵活性来选择弹奏哪些音乐流派和风格,不过这些选择主要还是由雇主的需要或者听众的口味来决定的。
后一类人中,有人主要就是为了钱,但也有一些专业人士即便没有报酬,也愿意在公共场合弹奏钢琴。他们喜欢运用自己的技巧和天赋为别人演奏音乐。在这个过程中,他们能找到许多乐趣。如果同时还有报酬,当然更是锦上添花。
后一类人中,有人是自学成材的,他们演奏乐曲是不看谱的。这些人有极高的天赋和能力,但除非通过音乐本身,否则无法向别人传递那种直观的感受。还有一些人无论在理论还是实践上都经过了正统的训练,他们能清楚地理解作曲家是用什么手法得到预期的情绪效果,并相应地改进自己的演绎手法。
后一类人中,有人从来没有打开钢琴看它的内部构造。还有一些人则对钢琴的发声原理好奇不已,最后发现是由于杠杆装置和绞盘在音锤敲击琴弦前的瞬间,牵引制音器的擒纵器,他们为弄明白由5000~10000个运动机件组成的这个乐器装置而感到高兴和自豪。
后一类人中,有人会对自己的手艺和成就心满意足,对它们带来的心灵上的愉悦和经济上的收入感到非常满意。但是,还有一些人不仅仅是艺术家、理论家和技师,他们会抽时间以导师的身份,将那些知识传授给其他人。
第 1 章——C#开发的进化史
1.1.2 C#2中的强类型集合
C# 2中引入了泛型(例如:List<T>)
发展史:

1.4 LINQ简介
LINQ(Language Integrated Query,语言集成查询)是关于查询的
1.4.1 查询表达式和进程内查询
例子:筛选集合
using System;
using System.Collections;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace demo2
{
internal class Program
{
static void Main(string[] args)
{
List<Product> products = Product.GetSampleProducts();
// LINQ查询
var filtered = from Product p in products
where p.Price > 10
select p;
foreach (Product product in filtered)
{
Console.WriteLine(product);
}
}
}
public class Product
{
private string _name;
public string Name
{
get { return _name; }
}
private decimal _price;
public decimal Price
{
get { return _price; }
}
// 初始化器
public Product(string name, decimal price)
{
_name = name;
_price = price;
}
public static List<Product> GetSampleProducts()
{
var list = new List<Product>
{
new Product("West Side Story", 9.99M),
new Product("Assassins", 14.99M),
new Product("Frogs", 13.99M),
new Product("Sweeney Todd", 10.99M)
};
return list;
}
public override string ToString()
{
return $"{_name}: {_price}";
}
}
}
补充:剖析.NET平台
此部分会区分C#,.net framework,.net core等概念以及说明其联系
C#语言
这是一套语法规范。就像英语或汉语,它规定了你怎么写代码(比如怎么写循环、怎么定义类)。它本身不能跑,需要被编译。
运行时
CLI / Runtime (运行时层):这是代码运行的物理环境。C# 编译后生成的不是机器码,而是中间语言(IL)。运行时(如 CLR)负责把 IL 翻译成电脑能懂的 0 和 1,并负责内存管理(GC)。
.Net平台确保用 IL 写的程序以符合 CLI 规范方式执行。CLI 的运行时部分称为 CLR(公共语言运行时)
| 平台名称 | 定位 | 现状 |
|---|---|---|
| .NET Framework | Windows 专属。用于开发传统的桌面软件 (WinForms/WPF) 和 ASP.NET 网站。 | 已停止大版本更新 (停留于 4.8.x),仅进行安全维护。 |
| .NET Core | 跨平台/高性能。支持 Windows, Linux, macOS。专为云原生、微服务和容器化设计。 | 演进为现代 .NET 的基石。从 3.1 版本后直接更名为 .NET 5/6/7/8/9/10。 |
| Xamarin / Mono | 移动端/游戏。主要用于 Android, iOS 以及 Unity 游戏引擎。 | 现已整合进 .NET MAUI。 |
C# 与各种平台概念间的关系:
A. 包含关系
.NET 是一个大词,它包含了 C# 语言 + 运行时 (CLR) + 类库 (BCL)。
你可以理解为:.NET = C# + Runtime + Libraries。
B. 兼容性协议:.NET Standard
由于 .NET Framework 和 .NET Core 曾长期并存,为了让一份类库代码能在两个平台上都能运行,微软推出了 .NET Standard。
- 它不是一个实体的程序,而是一份“合同/接口清单”。
- 只要你的类库遵循 .NET Standard 2.1,那么它既可以在 Unity (Mono) 里用,也可以在 .NET Core 里用。
C. 现代大一统:The One .NET
从 2020 年的 .NET 5 开始,微软正式废弃了 "Core" 这个后缀,目标是将所有平台统一。
- 现在的 .NET 10:就是曾经 .NET Core 的直系后裔,它现在既能做 Web,也能做桌面、移动端和 AI 开发。
框架库
关于.NET
- 本质与形态:
- 主要以 IL (中间语言) 形式存在。
- 地位平等:用户代码与库代码性能一致,没有“一等/二等公民”之分。
- 类比:库与运行时的关系 = 车身与引擎(库的代码量远大于运行时)。
- 标准化 (CLI Partition IV):
- 规范构成:文字描述(包含哪些库)+ XML 细节(类似于 C# 的 XML 注释文档)。
- 作用:定义了基础库的标准,确保跨实现(如 .NET、Mono)的兼容性。
- 标准库 vs. 非标准库:
- 标准库:遵循 CLI 规范,理论上可跨平台跑在任何 .NET 实现上。
- 非标准库:特定平台或框架专有(如 Windows Forms、ASP.NET、GTK#)。实际开发几乎不可避免地会用到非标准库。
- ".NET" 的完整定义:
- .NET = 运行时 + 框架库 + 编译器 (C#, VB.NET)。
- 它是一个构建在操作系统之上的完整开发平台。

浙公网安备 33010602011771号