.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的组成

.NET框架的组成
![[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的重要组成部分:

  1. 公共类型系统CTS(Common Type System)定义了那些托管代码中一定会使用的类型的特征。
    • CTS定义了一组丰富的内置类型,以及每种类型固有的,独有的特性。
    • CTS最重要的特征之一是所有类型都继承自公共的基类-object
  2. 公共语言规范CLS(Common Language Specification)说明了一个.NET兼容编程语言的规则,属性和行为,包括数据类型,类结构和参数传递。

.NET Core

.NET Core框架是一个用.NET框架的一个基于云的,跨平台的开源衍生产品,更好地解决Web开发以及Linux或macOS计算机的开发。.NET Core的主要目标:

  • 多平台支持
  • 快速开发和升级
  • 更小的应用程序占用空间
  • 更简单的部署
  • 更少的版本问题
  • 开源社区支持
  • 改进的应用程序性能
  • 全新的开始

.NET Core允许开发人员创建在Windows上运行的应用程序,并且只需进行少量的修改就可在Linux和macOS上运行。