Опубликован: 28.06.2006 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный технический университет им. Н.Э. Баумана
Лекция 6:

Язык CIL: инструкции для поддержки объектной модели

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Инструкции для работы с типизированными ссылками

Типизированные ссылки в системе типов .NET реализованы исключительно для поддержки некоторых особенностей синтаксиса и семантики языка Visual Basic .NET. Они представляют собой гибрид управляемого указателя и типа-значения.

Для работы с типизированными ссылками предусмотрены три инструкции CIL, которые мы рассмотрим в этом разделе.

Создание типизированной ссылки

Инструкция mkrefany (см. таблицу 3.40) предназначена для создания типизированных ссылок. Она упаковывает вместе управляемый указатель на некоторое значение и токен метаданных, описывающий тип этого значения. При этом токен содержится во встроенном операнде инструкции.

Таблица 3.40. Инструкция mkrefany
Код Инструкция Встроенный операнд Описание
0xC6 mkrefany token Создает типизированную ссылку на вершине стека вычислений

Диаграмма стека для инструкций mkrefany:

... , ptr -> ... , typedRef
Загрузка типа типизированной ссылки

Инструкция refanytype (см. таблицу 3.41) загружает токен метаданных, хранящийся в типизированной ссылке, на вершину стека вычислений.

Таблица 3.41. Инструкция refanytype
Код Инструкция Встроенный операнд Описание
0xFE 0x1D refanytype - Загружает токен, хранящийся в типизированной ссылке

Диаграмма стека для инструкций refanytype:

... , typedRef -> ... , type
Загрузка значения типизированной ссылки

Инструкция refanyval (см. таблицу 3.42) загружает управляемый указатель, хранящийся в типизированной ссылке, на вершину стека вычислений.

Таблица 3.42. Инструкция refanyval
Код Инструкция Встроенный операнд Описание
0xC2 refanyval token Загружает адрес, хранящийся в типизированной ссылке

Диаграмма стека для инструкций refanyval:

... , typedRef -> ... , ptr
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Анастасия Булинкова
Анастасия Булинкова
Рабочим названием платформы .NET было
Bogdan Drumov
Bogdan Drumov
Молдова, Республика
Azamat Nurmanbetov
Azamat Nurmanbetov
Киргизия, Bishkek