C#图解教程笔记 - Chapter1 C#和.NET框架

发布时间 2023-08-29 14:31:05作者: Cloudz3

0 摘要

CLR, BCL, FCL, DLL, CIL, JIT, CLI, CTS, CLS

1 在 .NET 之前

20世纪90年代末,使用微软平台的Windows编程分化成许多分支。如:

  • Visual Basic (VB)
  • C或 C++
  • 其他相关技术:
    • Win32 API
    • MFC
    • COM

所有这些编程技术有一个缺点,就是它们主要针对桌面程序而不是互联网进行开发。

愿景:需要一个集成的、面向对象的开发框架,它可以把一致和优雅带回编程。

2 .NET 时代

满足上述愿景所产生的框架。

.NET框架具备以下特点:

  • 多平台
  • 行业标准
  • 安全性

.NET框架由三部分组成:

  • 执行环境CLR
    • 内存管理和垃圾收集
    • 代码安全验证
    • 代码执行、线程管理及异常处理
  • 编程工具:涵盖了编码和调试需要的一切
    • Visual Studio集成开发环境(IDE)
    • .NET兼容的编译器(例如:C#、Visual Basic .NET、F#、IronRuby和托管的C++)
    • 调试器
    • Web开发服务器端技术,比如ASP.NET或WCF
  • BCL基类库

.NET框架带来的好处:

  • 面向对象的开发环境
  • 自动垃圾收集
  • 互操作性
  • 不需要COM
  • 简化的部署
  • 基类库
    • 通用基础类
    • 集合类
    • 线程和同步类
    • XML类

3 .NET编程语言编写的代码的编译过程

.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。

  • 程序集要么是可执行的,要么是DLL。
  • 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言。

程序集包含的信息中,包括下列项目:

  • 程序的CIL
  • 程序中使用的类型的元数据
  • 对其他程序集引用的元数据

程序的CIL直到被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤:

  1. 检测程序集的安全特性
  2. 在内存中分配空间
  3. 把程序集中的可执行代码发送给即时(JIT)编译器,把其中的一部分编译成本机代码。

程序集中的可执行代码只在需要的时候由JIT编译器编译,然后它就被缓存起来以备在后来的程序中执行。使用这个方法意味着不被调用的代码不会被编译成本机代码,而且被调用到的代码只被编译一次。

一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行如释放无主内存、检查数组边界、检查参数类型和管理异常之类的任务。

基于此也产生了两个概念:

  • 托管代码
  • 非托管代码

无论原始源文件的语言是什么,都遵循同样的编译和执行过程。

源文件\(\rightarrow\)编译器\(\rightarrow\)程序集\(\rightarrow\)JIT编译器\(\rightarrow\)本机代码

4 CLR

.NET框架的核心组件是CLR,它在操作系统的顶层,负责管理程序的执行。

CLR还提供下列服务:

  • 自动垃圾收集
  • 安全和认证
  • 通过访问BCL得到广泛的编程能力,包括如 Web 服务和数据服务之类的功能。

5 CLI

CLI公共语言基础结构,它把.NET框架的所有组件连结成一个内聚的、一致的系统。

CLI的重要组成部分:

  • 公共类型系统CTS:CTS定义了一组丰富的内置类型,以及每种类型固有的、独有的特性。
  • 公共语言规范CLS:详细说明了一个.NET兼容编程语言的规则、属性和行为,其主题包括数据类型、类结构和参数传递。