2016-08-12 4 views
3

Я учусь КСС по разным причинам, и, кажется, что классы часто определяют подобное:Что делать «авто», «ansi» и «cil manage» делать в CIL?

.class public auto ansi beforefieldinit [...] extends [mscorlib]System.Object 

и функции определяются как:

.method [...] (args) cil managed 

Я понимаю, все остальное, но я могу» t, похоже, выясняют, что делают «авто» или «ansi» или «cil managed». Ключевые слова также слишком расплывчаты для меня, чтобы получить конкретные результаты поиска (до того, как firstfield появился почти мгновенно).

ответ

4

ECMA-335 предоставляет информацию, которую вы ищете,

под II.10.1 Тип заголовка (ClassHeader) вы найдете:

авто - Схема полей обеспечивается автоматически. - §II.10.1.2

ansi - Маршалловые струны к платформе ANSI. - §II.10.1.5

Serge Лидин, в своей книге .Net IL Assembler пишет в главе 1 в классе декларации:

Ключевое слово автоматически в этом контексте определяет стиль макета класса (автоматическое, по умолчанию), направляя загрузчик, чтобы выложить этот класс, но он считает нужным. Альтернативы являются последовательными (которые сохраняют указанную последовательность полей) и явным (который явно определяет смещение для каждого поля, предоставляя точные инструкции загрузчика для размещения класса). Ключевое слово ansi определяет режим преобразования строк в классе при взаимодействии с неуправляемым кодом. Это ключевое слово по умолчанию указывает, что строки будут преобразованы в строки «нормальные» строки C в байтах. Альтернативные ключевые слова - это unicode (строки преобразуются в Unicode и из UTF-16 Unicode) и autochar (базовая платформа определяет режим преобразования строк).


под II.23.1.11 Флаги методов [MethodImplAttributes] вы можете прочитать:

IL - 0x0000 - метод осущ является CIL

Управляемый - 0x0000 - Метод осущ управляется

Serge Лидин, описывает это в Глава 1 в Декларации метода:

Ключевые слова cil и managed определяют так называемые флаги реализации MethodDef и указывают, что m тело тела представлено в IL. Метод, представленный в собственном коде, а не в IL, будет нести флаги реализации, не имеющие значения.


Я рекомендую вам, чтобы получить книгу по этой теме, есть несколько я думаю. Это намного быстрее, чем копаться в спецификациях ECMA-335.

0

От ECMA CLI:

Marshal ANSI строки на платформе как ANSI. §II.10.1.5

auto Макет полей предоставляется автоматически. §II.10.1.2

beforefieldinit Не нужно инициализировать тип до того, как статический метод вызвал . §II.10.1.6

О 'cil managed', этот метод atrribute указывает, что в нём содержится IL и весь его код управляется.

 Смежные вопросы

  • Нет связанных вопросов^_^