《CLR via C#》CLR基础

本文详细介绍了.NET框架中的CLR(Common Language Runtime)执行模型,包括源代码编译成托管模块、程序集的概念、加载CLR的过程、执行托管代码的步骤、IL和验证、与非托管代码的互操作性等。此外,还阐述了元数据的重要性及其在程序集中的作用,以及程序集的生成、打包、部署和管理。通过阅读,读者可以深入理解CLR的工作原理和.NET框架的基础知识。
摘要由CSDN通过智能技术生成

前言

该书不同章节分三种读法:

  1. 细读:都要读懂,要都理解了,读不懂反复读,找额外资料读。
  2. 通读:大致都了解可以干嘛,尽量看懂。
  3. 粗读:随手翻下,读不懂可以跳过,时不时回头看看。

1.CLR的执行模型(通读)

1.1将源代码编译成托管模块

CLR是公共语言运行库(Common Language Runtime)库是很早前的翻译,容易误解 ,又叫公共语言运行时。CLR和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境,支持C#、F#、VB、C++、Python、IL汇编等语言,CLR使“混合语言编程”成为可能,因为Microsoft为这些语言创建好了面向CLR的语言编译器。它负责内存管理、程序集加载、安全性、异常处理和线程同步等,并保证应用和底层操作系统之间必要的分离。而 .NET(即 .NET Framework,是C#开发的软件的运行环境)是一种以CLR为基础的软件开发平台,CLR目前作为.NET的一部分提供。
在这里插入图片描述
上图是一个简单的.NET框架

IL代码又叫托管代码,可以理解为IL是CLR的“语言”,因为CLR管理IL的执行。面向CLR的编译器除了要生成IL,还要生成完整的元数据(metadata)。元数据是自描述的类型信息,也就是一个数据表集合,主要有三种表,一种表描述了源代码中定义的类型及其成员,即定义表;另一种表描述了源代码中引用的类型及其成员,即引用表;另一种表是清单表,描述了构成程序集的文件、程序集中的文件所实现的public类型、与程序集关联的资源或数据文件,后面会有章节来介绍。由于编译器同时生成IL和元数据,并嵌入最终生成的托管模块(事实上,元数据总是嵌入和IL代码相同的EXE/DLL文件中),所以,元数据和它所描述的IL代码会一直同步。
在这里插入图片描述
元数据的部分用途:

  1. VS利用元数据智能提示。“智能感知”技术会解析元数据,告诉你一个类提供了哪些方法、属性、事件和字段,对于方法,还能告诉你需要的参数。
  2. CLR的代码验证过程使用元数据来确保代码只执行“类型安全”的操作。(“1.4.1IL和验证”详讲)
  3. 元数据允许将对象的字段序列化到内存块,将其发送给另一台机器,然后在另一台机器上反序列化,就可重建对象的状态
  4. 元数据允许垃圾回收器跟踪对象生存期。垃圾回收器从元数据知道该对象中的哪些字段引用了其他对象。

Microsoft的C++编译器默认生成包含非托管(即原生)代码的EXE/DLL模块,并在运行时操纵非托管数据。只有C++编译器才允许开发人员同时写托管和非托管代码,并生成到一个模块中。

1.2将托管模块合并成程序集

CLR和程序集(Assembly)一起工作,对CLR来说,程序集相当于“组件”。程序集是一个或多个托管模块(IL和元数据)或资源文件(.gif,.html等)的逻辑性分组,也是重用、安全性以及版本控制的最小单元

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值