请解释 .NET 中元数据及元数据表的概念,并阐述它们在程序运行时的具体作用。
考察说明
考查对 .NET 程序集内部结构及运行时机制的理解。
回答思路
- 【回答框架 1】元数据是 .NET 程序集中用于描述代码结构和类型信息的数据,它存储在程序集清单(Assembly Manifest)及类型定义等部分,本质上是二进制数据块,记录着类型、成员、引用和特性等。
- 【回答框架 2】元数据表是元数据在物理存储上的基本组织结构,通常指 ECMA-335 规定的表,如 TypeDef、MethodDef、FieldDef、Module 等,这些表格通过行和列的形式记录各类元数据项。
- 【回答框架 3】在运行时,元数据的作用包括:供 CLR 进行类型加载和内存布局,支持反射调用,以及用于 JIT 编译时解析方法调用和类型引用,同时安全检查(如 CAS、类型安全验证)也依赖它。
- 【回答框架 4】元数据使程序集具备自描述性,因此不需要单独的 IDL 或头文件即可实现跨语言互操作,并支持版本化和 Side-by-side 执行。元数据表在其中提供索引化的查找入口,提升如方法表(MethodTable)构建的效率。
- 【关键点 1】元数据是程序集中的类、方法、字段、引用等结构信息的二进制描述。
- 【关键点 2】元数据表按 ECMA-335 规范组织,常见表包括 TypeDef、MethodDef、FieldDef、Module 等。
- 【关键点 3】运行时元数据用于类型加载、反射、JIT 解析和安全性验证,保证程序集自描述与互操作。
- 【易错点 1】不要将元数据混淆为 IL 代码,元数据是描述信息,而 IL 才是可执行指令。
- 【易错点 2】元数据表并非一个单一表格,而是多张关联的表的集合,存在主键和引用关系。