《Expert .NET 2.0 IL Assembler》 译者笔记 2
第8章 基本类型和签名
基本类型就那么几种,都在表8-1中列出了。此外,还提到了数据指针类型和函数指针类型。
CLR中有两种类型的数组——向量和多维数组。它们的创建方式不同,从而布局也不同。
以上都是炒“冷饭”,学过一点C#都多少知道一点,而修饰符才是一个有趣的特性。4种修饰符各有用途:
修饰符modreq和modopt,用于托管/非托管封送的返回类型或方法参数上。在将非托管方法封送为托管方法时尤其有用,从而区分在C++中不同但在CLR中相同的类型,如C++中的int和long,都对应CLR中的E_T_I4。
修饰符Sentinel,也就是...,也就是vararg方法中可选参数和固定参数的中间分隔符号。
修饰符pinned只适用于方法的局部变量,一旦指定,该变量不会进行垃圾收集。
由CLR识别的非托管类型,又称为“本地的”(native),位于CorHdr.h的枚举CorNativeType中。其中,值得一提的是N_T_ARRAY的参数<sizes>。
在签名中的类型引用,有CLASS和VALUETYPE,还有OBJECT和STRING。
终于说到签名了。篇幅不大,但极其精辟。
像字段、方法和局部变量这样的程序项,并不是直接使用编码类型来描述的;而是通过签名来描述的。签名是包括一个或多个编码类型的字节数组,驻留在元数据的#Blob流中。
使用签名的元数据表有:Field表、Method表、Property表、MemberRef表、StandAloneSig表(间接调用签名)、TypeSpec表(局部变量签名)。
签名的第一个字节标识了这个签名的类型,出于历史原因,称为签名的调用约定。
第11章 泛型类型
在CLR 1.1的时代,就已经在IL中为泛型预留出了位置,这使得从.CLR 1.1升级为2.0极其简单——只是增加了几个元数据表。我们可以将其想象为抽象工厂模式,以添加一个维度的方式,达到翻倍的效果。
T^1这样的符号是多么的神奇,以至于我们不需要学太多的新东西。所以非泛型的技术,在泛型中仍然适用。
CLR不会再有太大的改动了,高级语言的那些语法糖只是在编译器上做文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架