CLR元数据类型定义表计数

时间:2012-07-12 10:20:11

标签: c# clr ildasm

请考虑以下代码:

public sealed class Program
{
    public static void Main()
    {
        System.Console.WriteLine("Hi");
    }
}

使用csc.exe编译后,我使用ILDasm打开程序集,发现了一些我无法弄清楚的内容:

ILDasm“Show!”命令只显示单个TypeDef(“程序”类),但在统计视图中,我可以看到TypeDef计数为2。

知道第二种类型来自何处?

资料来源:Jeffrey Richter第39页“CLR via C#”第3版。

1 个答案:

答案 0 :(得分:3)

使用View + MetaInfo + Raw:标题,架构,行。您将在Show中获得更多细节!倾倒。你现在可以看到:

   1 == 0:00000000, 1:string#1, 2:string#0, 3:TypeDefOrRef[02000000], 4:Field[4000001], 5:Method[6000001]
   2 == 0:00100000, 1:string#22, 2:string#2a, 3:TypeDefOrRef[01000001], 4:Field[4000001], 5:Method[6000001]

注意第一个,标记值0.只是一个虚拟条目,它意味着“不是一个类型”。这样做可以使元数据解析器更容易,这样任何typeref标记值在表中都有一个条目,并且不需要为0添加测试。