答案 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
。