Опубликован: 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 было
Александр Караблин
Александр Караблин
Россия, Магадан, Северо-восточный государственный университет, 2011
Алена Иванова
Алена Иванова
Россия, Калининградская область