C# 体系结构
C#
C#(C Sharp)是一种由微软公司开发的通用、面向对象的编程语言,它被设计用来构建.NET平台上的各种应用程序。.NET是一个软件开发框架,它提供了一系列工具和库,使开发人员能够构建各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和服务等。
C#是.NET框架中最常用的编程语言之一,但并不是唯一的选择。除了C#之外,开发人员还可以使用其他语言,如Visual Basic .NET、F#等,来开发.NET应用程序。不过,由于C#的易学性、强大的功能和广泛的支持,它已经成为了.NET平台上最受欢迎的编程语言之一。
因此,C#与.NET的关系可以理解为C#是.NET框架的主要编程语言之一,而.NET提供了一个框架和平台,让开发人员能够使用各种编程语言来构建应用程序。
.NET
.NET Framework:
- .NET Framework是微软最早引入的框架,最初设计用于在Windows操作系统上构建和运行应用程序。
- 它包含了一个CLR(Common Language Runtime)的运行时环境,以及BCL(Base Class Library)等库,提供了一系列用于开发应用程序的功能和工具。
- .NET Framework主要用于传统的Windows桌面应用程序、ASP.NET Web应用程序和一些企业级应用。
.NET Core:
- .NET Core是微软在.NET Framework之后推出的另一个框架。
- 与.NET Framework不同,.NET Core是跨平台的,可以在Windows、Linux和macOS等操作系统上运行。
- 它也包含了自己的CLR和BCL,并且设计更为轻量和模块化,以适应不同的应用场景。
- .NET Core主要用于现代Web应用程序、云原生应用、微服务和跨平台开发。
整合到.NET 5及其后续版本:
- 在.NET 5.0版本之后,微软将.NET Core和.NET Framework整合到了一个新的统一平台中,即.NET 5,目前最新版为.NET 8
- 这一整合的目的是为了提供更一致的开发体验和更广泛的平台支持。

CLR
CLR(Common Language Runtime)是.NET Framework和.NET Core中的关键组件之一,它提供了一个运行时环境,使得.NET应用程序运行。
组件.NET Framework CLR 与.NET Core CLR略有不同
组件 | .NET Framework CLR | .NET Core CLR |
---|---|---|
类加载器 | 是 | 是 |
即时编译器 | 是 | 是 |
代码管理器 | 是 | 是 |
垃圾回收器 | 是 | 是 |
安全引擎 | 是 | 是 |
调试引擎 | 是 | 是 |
类型检查器 | 是 | 是 |
异常管理器 | 是 | 是 |
线程支持 | 是 | 是 |
COM Marshaler | 是 | 否(在.NET Core中没有直接等价的组件) |
跨平台支持组件 | 否 | 是 |
- 类加载器(Class Loader):负责将应用程序的汇编(包括MSIL代码和元数据)加载到内存中,为应用程序的执行做准备。
- 即时编译器(Just-In-Time Compiler,JIT):将MSIL代码翻译成本机执行代码,以便在特定硬件平台上执行。
- 代码管理器(Code Manager):管理应用程序代码的执行,包括控制流程和执行顺序等。
- 垃圾回收器(Garbage Collector,GC):负责管理.NET运行时的内存分配和释放,通过自动回收不再使用的对象来防止内存泄漏。
- 安全引擎(Security Engine):提供基于认证的安全机制,用于管理用户身份验证和授权。
- 调试引擎(Debugger):用于开发人员调试和跟踪应用程序代码,帮助定位和修复错误。
- 类型检查器(Type Checker):检查并禁止非安全的类型转换,以及对未初始化的变量进行访问等操作,提高代码的安全性和稳定性。
- 异常管理器(Exception Manager):提供结构化的异常处理,与Windows结构化异常处理机制(SEH)集成,改进了错误报告和处理。
- 线程支持(Thread Support):提供多线程编程的类和接口,用于管理和控制应用程序中的多个执行线程。
- COM Marshaler(COM列集器):处理.NET和COM之间的互操作,包括数据类型转换和接口调用等。
- .NET基础类库(Base Class Library,BCL):集成了大量用于开发.NET应用程序的类库和API,提供了丰富的功能和工具,简化了开发人员的工作。
CLR工作原理
编译和加载:
- 首先,源代码被编译成托管模块,这些模块是标准的 Windows 可移植执行体(PE32) 文件或 64 位 Windows 可移植执行体(PE32+) 文件(MSIL及元数据)。
- 这些托管模块需要 CLR 才能执行。
元数据:
- 语言编译器生成元数据,描述代码中的类型、成员和引用。
- 元数据与代码一起存储在 PE 文件中,每个 PE 文件都包含元数据。
- 元数据用于查找和加载类、安排实例、解析方法调用、生成本机代码、强制安全性以及设置运行时上下文边界。
生存期管理和垃圾回收:
- CLR 自动处理对象布局和管理对象引用。
- 托管数据是按照规则进行生存期管理的对象,垃圾回收器负责释放不再使用的对象,避免内存泄漏。
跨语言集成:
- 由于通用类型系统,不同语言编写的对象可以互相通信。
- 可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。
版本控制和部署支持:
- 元数据确保组件或应用程序具有所需的所有内容的指定版本,避免中断。
- 注册信息和状态数据不再保存在注册表中,简化组件复制和删除任务。
IL
在C#中,IL(Intermediate Language,中间语言)是.NET平台的核心概念。编写的C#代码在编译时被转换为IL代码,也称为MSIL(Microsoft Intermediate Language)或CIL(Common Intermediate Language)。IL是一种与平台无关的中间语言,它在.NET应用程序的运行时被执行。
以下是对C#中间语言的关键概念和原理的简要介绍:
IL的生成和编译:
- 编写的C#代码通过编译器编译为IL代码。
- IL代码包含了C#代码的原始逻辑,但是与平台无关。
IL的优势:
- 平台无关性:IL代码可以在任何支持.NET的平台上运行。
- 安全性:IL代码在执行之前由托管代码执行引擎(CLR)验证,以确保类型安全和安全性。
IL指令:
- IL代码由一系列指令组成,这些指令由CLR解释和执行。
- 每个指令执行特定操作,如加载值到堆栈、执行算术操作、调用方法等。
IL的阅读:
- 可以使用IL反汇编器(如ILSpy)查看编译后的IL代码。
- 这有助于理解C#代码如何转换为IL代码,以及更深入地理解.NET运行时的工作原理。
JIT编译:
- 当.NET应用程序启动时,CLR将IL代码编译为特定平台的本机代码。
- 这称为即时(Just-In-Time)编译,将IL代码转换为适用于当前系统架构的本机机器代码。
反编译和保护:
- IL代码可以被反编译为高级语言或其他语言。
- 为了保护知识产权,可以使用代码混淆技术来混淆IL代码,增加反编译的难度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南