Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Внутреннее представление индексаторов типов
Внутреннее представление индексаторов типов
Мы рассмотрели примеры метода индексатора в C#, и пришло время выяснить, как представляются индексаторы в терминах CIL. Если открыть числовой индексатор типа Garage, то будет видно, что компилятор C# создает свойство Item, которое сводится к подходящей паре методов get/set.
property instance class SimpleIndexer.Car Item(int32) {
.get instance class SimpleIndexer.Car SimpleIndexer.Garage::get_Item(int32)
.set instance void SimpleIndexer.Garage::set_Item(int32, class SimpleIndexer.Car)
} // end of property Garage::Item
Методы get_Item() и set_Item() будут реализованы аналогично любому другому свойству .NET, например:
method public hidebysig specialname instance сlass SimpleIndexer.Car get_Item(int32 pos) cil managed {
Code size 22 (0x16)
.maxstack 2
.locals init ([0] class SimpleIndexer.Car CSS1$0000)
IL_0000: ldarg.0
IL_0001: ldfld class [mscorlib] System.Collections.ArrayList SimpleIndexer.Garage::carArray
IL_0006: ldarg.1
IL_0007: callvirt instance object [mscorlib] Sysftem.Collections.ArrayList::get_Item(int32)
IL_000c: castclass SimpleIndexer.Car
IL_0011: stloc.0
IL_0012: br.s IL_0014
IL_0014: ldloc.0
IL_0015: ret
} // end of method Garage::get_Item
- Создание пользовательских индексаторов
- Внутреннее представление индексаторов типов
- Заключительные замечания об индексаторах
- Перегрузка операций
- Перегрузка бинарных операций
- Перегрузка унарных операций
- Перегрузка операций проверки на тождественность
- Перегрузка операций сравнения
- Внутреннее представление перегруженных операций
- Использование перегруженных операций в языках, не поддерживающих перегрузку операций
- Заключительные замечания о перегрузке операций
- Пользовательские преобразования типов
- Создание пользовательских подпрограмм преобразования
- Определение подпрограмм неявного преобразования
- Внутреннее представление пользовательских подпрограмм преобразования
- Ключевые слова C#, предназначенные для более сложных конструкций
- Директивы препроцессора C#
- Резюме
- Внутреннее представление перегруженных операций
- Внутреннее представление пользовательских подпрограмм преобразования
- ГЛАВА 9. Специальные приемы построения типов
- Создание пользовательских индексаторов
- Использование типов содержимого и столбцов
- 5.3 Классификация типов резервного копирования
- Внутреннее устройство системы и обеспечение её целостности
- 2.7 Преобразования типов
- 4.2. Формализованное представление угроз ИБ от персонала
- Описание типов модулей оперативной памяти
- 5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики
- Объекты без прототипов