MethodInfo.MetadataToken的目的是什么?

12

令牌通常用于什么?更重要的是,如果我有一个MetadataToken,我能否获取MethodInfo对象?

1个回答

10

元数据标记是CIL规范中组织数据的一部分。它通常是您不需要关心的内容。

更具体地说,元数据标记是表标识符和资源标识符的元组。

不能依靠元数据标记在编译之间保持一致性,因此不应将其用于标识方法。

可以使用Module.ResolveMethod将元数据标记转换回MethodBase。 MethodBase是MethodInfo的基类型。如果元数据标记是方法(而不是构造函数)的,则应该能够将其强制转换为MethodInfo。

一个程序集由一个或多个模块组成,但实际上一个程序集只包含一个模块 - C#和VB.NET编译器不生成多模块程序集。


刚开始学习这个,发现它非常迷人。可惜的是,你不能在每次编译中都依赖它。但即便如此,我可以想象出一种可能的序列化格式,利用它会比使用反射更快地进行反序列化。当然,两端的程序集必须完全相同才能使用令牌,但如果不是这样,该格式总是可以回退到反射。 - Emperor Eto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接