Внутреннее представление перегруженных операций

Внутреннее представление перегруженных операций

Подобно любому элементу программы C#, перегруженные операции представляются специальными элементами синтаксиса CIL. Откройте, например, компоновочный блок OverloadedOps.exe с помощью ildasm.exe. Как показано на рис. 9.1, перегруженные операции внутри блока представляются скрытыми методами (это, например, op_Addition(), oр_Subtraction(), op_Equality() и т.д.).

Теперь, если рассмотреть CIL-инструкции для метода op_Addition, то вы обнаружите, что csc.exe добавляет в метод ключевое слово specialname.

.method public hidebysig specialname static valuetype OverloadedOps.Point op_Addition(valuetype OverloadedsOps.Point p1, valuetype OverloadedOps.Point p2) cil managed {

 …

}

Рис. 9.1. В терминах CIL перегруженные операции отображаются в скрытые методы

Итак, любая операция, допускающая перегрузку, сводится в терминах CIL к специальному именованному методу. В табл. 9.2 раскрывается соответствие имен типичных операций C# и методов CIL.

Таблица 9.2. Соответствие имен операций C# и методов CIL

Внутренняя операция C# Представление CIL
–- op_Decrement()
++ op_Increment()
+ op_Addition()
–  op_Subtraction()
* op_Multiply()
/ op_Division()
==  op_Equality()
op_GreaterThan()
op_LessThan()
!= op_Inequality()
›= op_GreaterThanOrEqual()
‹= op_LessThanOrEqual()
–= op_SubtractionAssignment()
+= op_AdditionAssignment()
Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ОПЫТЫ: Внутреннее расследование

Из книги Журнал «Компьютерра» № 39 от 24 октября 2006 года автора Журнал «Компьютерра»

ОПЫТЫ: Внутреннее расследование Автор: Сергей ЛеоновСегодня мы займемся варварским делом — разборкой одной из современных цифровых фотокамер. Не слишком часто удается разобрать до винтика подобную технику, но раз уж такая возможность представилась, почему бы не


ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ Как уже было замечено в главе 2, каждый файл в системе UNIX имеет уникальный индекс. Индекс содержит информацию, необходимую любому процессу для того, чтобы обратиться к файлу, например, права собственности на файл, права доступа к


Внутреннее представление свойств в C#

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Внутреннее представление свойств в C# Многие программисты (особенно те, которые привыкли использовать C++) стремятся использовать традиционные префиксы get_ и set_ для методов чтения и модификации (например, get_FullName() и set_FullName()). Против самого соглашения возражений нет. Однако


Внутреннее представление индексаторов типов

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

Внутреннее представление индексаторов типов Мы рассмотрели примеры метода индексатора в C#, и пришло время выяснить, как представляются индексаторы в терминах CIL. Если открыть числовой индексатор типа Garage, то будет видно, что компилятор C# создает свойство Item, которое


Внутреннее представление пользовательских подпрограмм преобразования

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Внутреннее представление пользовательских подпрограмм преобразования Как и в случае перегруженных операций, те методы, которые обозначены ключевыми словами implicit или explicit, получают "специальные имена" в терминах CIL: op_Implicit и op_Explicit соответственно (рис. 9.2). Рис. 9.2.


Inner Glow (Внутреннее свечение)

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Inner Glow (Внутреннее свечение) Эффект Inner Glow (Внутреннее свечение), аналогично эффекту внутренней тени, позволяет задать свечение элемента по внутреннему его контуру. Во всем остальном его действие совпадает с действием эффекта Outer Glow (Внешнее свечение) (рис. 8.13). Рис. 8.13.


26. Сохраняйте естественную семантику перегруженных операторов

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

26. Сохраняйте естественную семантику перегруженных операторов РезюмеПрограммисты ненавидят сюрпризы. Перегружайте операторы только в случае веских на то оснований, и сохраняйте при этом их естественную семантику. Если это оказывается сложным, возможно, вы неверно


Внутреннее устройство Pocket PC

Из книги 1С: Бухгалтерия 8 с нуля. 100 уроков для начинающих автора Гладкий Алексей Анатольевич

Внутреннее устройство Pocket PC Если не брать в расчет сам факт миниатюрности и отсутствие некоторых привычных на настольном ПК устройств, таких как клавиатура и мышь, то можно считать, что Pocket PC является полноценным компьютером. Мало того, по своим параметрам он является


Внутреннее соединение

Из книги C++ для начинающих автора Липпман Стенли

Внутреннее соединение Следующий оператор соединяет две таблицы, которые связаны через внешний ключ FK правой таблицы (Table2) и первичный ключ PK таблицы Table1:SELECTТаblе1.PK,Table1.COL1,Table2.PKX,Table2.COLXFROM Table1 INNER JOIN Table2ON Table1.PK = Table2.FKWHERE... условия-поискаЭто спецификация внутреннего


Внутреннее устройство технологии

Из книги Разработка ядра Linux автора Лав Роберт

Внутреннее устройство технологии Когда любой запрос вызывает хранимую процедуру, то текущее определение этой хранимой процедуры копируется в этот момент в кэш метаданных. В Классическом сервере эта копия присутствует в течение всего времени пользовательского


Урок № 61. Внутреннее перемещение ТМЦ

Из книги автора

Урок № 61. Внутреннее перемещение ТМЦ Одной из распространенных операций складского учета является операция по внутреннему перемещению товарно-материальных ценностей внутри предприятия. В этом случае перемещаемые ценности не покидают пределы предприятия, а лишь


9.1. Объявления перегруженных функций

Из книги автора

9.1. Объявления перегруженных функций Теперь, научившись объявлять, определять и использовать функции в программах, познакомимся с перегрузкой – еще одним аспектом в C++. Перегрузка позволяет иметь несколько одноименных функций, выполняющих схожие операции над


15.1.2. Имена перегруженных операторов

Из книги автора

15.1.2. Имена перегруженных операторов Перегружать можно только предопределенные операторы языка C++ (см. табл. 15.1).Таблица 15.1. Перегружаемые операторы+-*/%^&|~!,===++--==!=&&||+=-=/=%=^=&=|=*=&==[]()--*newnew[]deletedelete[]Проектировщик класса не вправе объявить перегруженным оператор с другим


15.1.3. Разработка перегруженных операторов

Из книги автора

15.1.3. Разработка перегруженных операторов Операторы присваивания, взятия адреса и оператор “запятая” имеют предопределенный смысл, если операндами являются объекты типа класса. Но их можно и перегружать. Семантика всех остальных операторов, когда они применяются к


Внутреннее представление переменной jiffies

Из книги автора

Внутреннее представление переменной jiffies Переменная jiffies исторически всегда представлялась с помощью типа unsigned long и, следовательно, имеет длину 32 бит для 32-разрядных аппаратных платформ и 64 бит для 64-разрядных. В случае 32-разрядного значения переменной jiffies и частоты