LocalVarSig 可以有多个约束属性吗?

Can a LocalVarSig have multiple constraint attributes?

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

来自 ECMA-335 §II.23.2.9,添加了强调:

The Constraint item in Signatures currently has only one possible value, ELEMENT_TYPE_PINNED (§II.23.1.16), which specifies that the target type is pinned in the runtime heap, and will not be moved by the actions of garbage collection.

A Constraint can only be applied within a LocalVarSig (not a FieldSig).

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

那么,pinned 的多个实例是否有效?看起来是这样。 assembler (ILasm) 接受局部变量的多个实例:

.locals init (int32& pinned pinned pinned x)

如果我 assemble 这个然后 disassemble 它(ILdasm),生成的 IL 保留重复的 pinned 关键字。使用 MdDumper 查看程序集还会显示 StandAloneSig table.

中重复的 0x45 字节

我没有看到多个 pinned 约束的验证差异,所以我认为它们是多余的,相当于只有一个 pinned.