Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

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

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

Подобно любому элементу программы 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()

Оглавление книги


Генерация: 1.166. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз