Из ECMA-335 §II.23.2.9, добавлен акцент:
Элемент Ограничения в Сигнатурах в настоящее время имеет только одно возможное значение ,ELEMENT_TYPE_PINNED (§II.23.1.16), который указывает, что целевой тип закреплен в куче времени выполнения и не будет перемещен действиями сборки мусора.
Ограничение может быть применено только в LocalVarSig(не FieldSig).
Итак, pinned
- единственно возможное значение ограничения, по крайней мере, в текущей версии CIL.
Итак, несколько экземпляров pinned
действует?Похоже, так.Ассемблер (ILasm) принимает несколько экземпляров для локальной переменной:
.locals init (int32& pinned pinned pinned x)
Если я собираю это, а затем разбираю его (ILdasm), результирующий IL сохраняет повторяющееся ключевое слово pinned
.Вглядываясь в сборку с помощью MdDumper также показывает повторный байт 0x45
в таблице StandAloneSig
.
Я не видел никаких проверочных различий с несколькими ограничениями pinned
, поэтому япредположим, что они являются избыточными и эквивалентны одному pinned
.