Индексаторы без базового массива

Следует особо подчеркнуть, что индексатор совсем не обязательно должен оперировать массивом. Его основное назначение — предоставить пользователю функциональные возможности, аналогичные массиву. В качестве примера в приведенной ниже программе демонстрируется индексатор, выполняющий роль массива только для чтения, содержащего степени числа 2 от 0 до 15. Обратите внимание на то, что в этой программе отсутствует конкретный массив. Вместо этого индексатор просто вычисляет подходящее значение для заданного индекса.

//индексаторы совсем не обьязательно должны оперировать отдельными массивами.

using System;

class PwrOfTwo

{

//доступ к логическому массиву, содержащему степени числа 2 от 0 до 15

public int this[int index]

{

//вычислить и возвратить степень числа 2

get

{

if ((index >= 0) && (index < 16)) return pwr(index);

else return -1;

}

//аксессор set отсутствует.

}

int pwr(int p)

{

int result = 1;

for (int i = 0; i < p; i++)

result *= 2;

return result;

}

}

class UsePwrOfTwo

{

static void Main()

{

PwrOfTwo pwr = new PwrOfTwo();

Console.Write("Первые 8 степеней числа 2: ");

for (int i = 0; i < 8; i++)

Console.Write(pwr[i] + " ");

Console.WriteLine();

Console.Write("А это некоторые ошибки: ");

Console.Write(pwr[-1] + " " + pwr[17]);

Console.WriteLine();

}

}

На применение индексаторов накладываются два существенных ограничения:

1. Во-первых, значение, выдаваемое индексатором, нельзя передавать методу в качестве параметра ref или out, поскольку в индексаторе не определено место в памяти дляего хранения.

2. И во-вторых, индексатор должен быть членом своего класса и поэтому не может быть объявлен как static.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: