C#与.NET框架(二)
.NET Framework简介
早期的Windows编程有许多分支,有用Win32 API的,有用MFC(Microsoft Foundation Class,微软基础类库)的,还有用COM(Component Object Model,组件对象模型)。
然而这些技术都有自己的问题,纯Win32 API不是面向对象的,工作量大,MCFC是面向对象的,但它不一致且逐渐陈旧,COM虽然概念简单,但实际代码复制,且需要丑陋,不雅的底层基础代码。
.NET Framework是Microsoft为开发应用程序而创建的一个具有革命意义的平台。
- 多平台,可以运行在多个操作系统上:
Windows,Linux,macOS - 未限制应用程序的类型:
桌面应用程序、Windows桌面应用程序(UWP)、云/Web应用程序、Web API、其他各种类型的应用程序 - 对于Web、云和Web API应用程序,按照定义是多平台的应用程序,因为任何带有Web浏览器的系统都可以访问
- 可以用于各种语言:
C#,C++,F#,JavaScript,Visual Basic,COBOL及其他旧语言
.NET Framework的组成

![[csharp_net_framework.png]]
- CLR(Common Language Runtime,公共语言运行库),CLR在运行时管理程序的执行,保护一下内容
- 内存管理和垃圾收集
- 代码安全验证
- 代码执行,线程管理及异常处理
- BCL(Base Class Library,基类库)是.MET框架使用的一个大的类库。
- 编程工具
- Visual Studio集成开发环境(IDE)
- .NET兼容的编译器
- 调试器
- WEB开发服务器端技术(ASP.NET或WCF)
编译成CIL
.NET语言的编译器接受源代码文件,并生成名为**程序集(assembly)**的输出文件。
- 程序集要么是可执行的,要么是DLL。
- 程序集的代码并不是本机代码,而是一种名为CIL(Common Intermediate Language,通用(公共)中间语言)的中间语言。
- 程序集保护的信息包括:
- CIL
- 程序中使用的类型的元数据
- 对其他程序集引用的元数据
- 全局程序集缓存(Global Assembly Cache, GAC)

![[csharp_net_cil.png]]
编译成本机代码并执行
程序的CIL直到被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤:
- 检查程序集的安全特性
- 在内存中分配空间
- 把程序集中的可执行代码发送给即时(just-in-time,JIT)编译器,把其中的一部分编译成本机代码。

![[csharp_net_clr.png]]
编译和执行过程
![[csharp_net_clr2.png]]
CLR
.NET框架的核心组件是通用中间语言CLR,它在操作系统的顶层,负责管理程序的执行,CLR还提供下列服务:
- 自动垃圾收集
- 安全和认证
- 通过访问BCL得到广泛的编程功能,包括如Web服务和数据服务之类的功能

![[csharp_net_clr3.png]]
CLI
CLI(Common Language Infrastructure,公共语言基础结构)的组成图:

![[csharp_net_cli.png]]
CLI的重要组成部分:
- 公共类型系统CTS(Common Type System)定义了那些托管代码中一定会使用的类型的特征。
- CTS定义了一组丰富的内置类型,以及每种类型固有的,独有的特性。
- CTS最重要的特征之一是所有类型都继承自公共的基类-object
- 公共语言规范CLS(Common Language Specification)说明了一个.NET兼容编程语言的规则,属性和行为,包括数据类型,类结构和参数传递。
.NET Core
.NET Core框架是一个用.NET框架的一个基于云的,跨平台的开源衍生产品,更好地解决Web开发以及Linux或macOS计算机的开发。.NET Core的主要目标:
- 多平台支持
- 快速开发和升级
- 更小的应用程序占用空间
- 更简单的部署
- 更少的版本问题
- 开源社区支持
- 改进的应用程序性能
- 全新的开始
.NET Core允许开发人员创建在Windows上运行的应用程序,并且只需进行少量的修改就可在Linux和macOS上运行。