CLR 令牌可以是零或负数



某些.NET反射方法(例如,Module.ResolveField)接受所谓的标记作为参数。这些令牌只是 Int32 数字。我在反汇编器中只看到正标记,但一般来说,整数也可以是负数或零。假设 CLR 令牌仅为正数是否安全?

它们实际上是无符号的数字。摘自 MS 分区 II,第 22 节(摘自本页):

元数据

项(元数据表中的记录)由元数据令牌寻址。未编码的元数据标记是 4 字节无符号整数,它们包含最高有效字节中的元数据表索引和三个最低有效字节中从 1 开始的记录索引

鉴于没有元数据表索引设置了最高位,因此不必担心在将 unsigned int 转换为 int 时,会产生溢出或负数。

最新更新