[深入解析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>

发展史:

img

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)
    • 它是一个构建在操作系统之上的完整开发平台。
posted @ 2026-07-28 18:26  绘星tsuki  阅读(1)  评论(0)    收藏  举报