Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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() |
- Создание пользовательских индексаторов
- Внутреннее представление индексаторов типов
- Заключительные замечания об индексаторах
- Перегрузка операций
- Перегрузка бинарных операций
- Перегрузка унарных операций
- Перегрузка операций проверки на тождественность
- Перегрузка операций сравнения
- Внутреннее представление перегруженных операций
- Использование перегруженных операций в языках, не поддерживающих перегрузку операций
- Заключительные замечания о перегрузке операций
- Пользовательские преобразования типов
- Создание пользовательских подпрограмм преобразования
- Определение подпрограмм неявного преобразования
- Внутреннее представление пользовательских подпрограмм преобразования
- Ключевые слова C#, предназначенные для более сложных конструкций
- Директивы препроцессора C#
- Резюме
- Перегрузка операций проверки на тождественность
- Заключительные замечания о перегрузке операций
- Перегрузка бинарных операций
- Перегрузка унарных операций
- Внутреннее представление пользовательских подпрограмм преобразования
- Внутреннее представление индексаторов типов
- Использование перегруженных операций в языках, не поддерживающих перегрузку операций
- Перегрузка операций сравнения
- 4. Свойства унарных операций
- 3. Свойства бинарных операций
- 4. Варианты операций соединения
- Внутреннее устройство системы и обеспечение её целостности