LocalVarSig是否可以具有多个约束属性?

时间:2018-09-26 17:33:45

标签: cil ilasm

在LocalVarSig语法图中,CustomMod和Constraint元素处于循环中,因此这意味着可以有多个Constraint元素。如果有多个约束元素,其语义是什么?谢谢!

1 个答案:

答案 0 :(得分:1)

在ECMA-335§II.23.2.9中,添加了重点:

  

签名中的约束项当前只有一种可能   ,ELEMENT_TYPE_PINNED(第II.23.1.16节),用于指定   目标类型固定在运行时堆中,不会被移动   垃圾收集的动作。

     

约束只能应用于LocalVarSig(不适用于   FieldSig)。

至少在当前的CIL版本中,pinned是唯一可能的约束值。

那么pinned的多个实例是否有效?看起来是这样。汇编器(ILasm)接受本地变量的多个实例:

.locals init (int32& pinned pinned pinned x)

如果我先组装然后再分解(ILdasm),则生成的IL将保留重复的pinned关键字。用MdDumper进入程序集也显示了0x45表中重复的StandAloneSig字节。

我没有看到具有多个pinned约束的任何验证差异,因此我认为它们是多余的,等同于只有一个pinned