Может ли LocalVarSig иметь несколько атрибутов ограничения? - PullRequest
0 голосов
/ 26 сентября 2018

На синтаксической диаграмме LocalVarSig элементы CustomMod и Constraint находятся в цикле, поэтому это означает, что может быть несколько элементов Constraint.Если существует более одного элемента Constraint, какова его семантика?Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2018

Из 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.

...