Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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

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


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