Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Применение индексаторов и свойств





Как вам должно быть уже известно, индексирование всех массивов в C# начинается с нуля. Но в некоторых приложениях индексирование массива удобнее начинать с любой произвольной точки отсчета: с 1 или даже с отрицательного числа, например от -5 и до 5. Рассматриваемый здесь класс RangeArray разработан таким образом, чтобы допускать подобного рода индексирование массивов.

RangeArray rа = new RangeArray(-5, 10); // массив с индексами от -5 до 10

for(int i=-5; i <= 10; i++) ra[i] = i; // индексирование массива от -5 до

______________________________________________________________________________________

/* Создать класс со специально указываемыми пределами индексирования массива.

Класс RangeArray допускает индексирование массива с любого значения, а не

только с нуля. При создании объекта класса RangeArray указываются начальный

и конечный индексы. Допускается также указывать отрицательные индексы.

Например, можно создать массивы, индексируемые от -5 до 5, от 1 до 10

или же от 50 до 56. */

using System;

class RangeArray

{

//закрытые данные.

int[] a; //ссылка на базовый массив

int lowerBound; //наименьший индекс

int upperBound; //наибольший индекс

// Автоматически реализуемое и доступное только для чтения свойство Length.

public int Length { get; private set; }

// Автоматически реализуемое и доступное только для чтения свойство Error.

public bool Error { get; private set; }

// Построить массив по заданному размеру.

public RangeArray(int low, int high)

{

high++;

if (high <= low)

{

Console.WriteLine("Неверные индексы");

high = 1;// создать для надежности минимально допустимый массив

low = 0;

}

a = new int[high - low];

Length = high - low;

lowerBound = low;

upperBound = --high;

}

// Это индексатор для класса RangeArray.

public int this[int index]

{

// Это аксессор get.

get

{

if (ok(index))

{

Error = false;

return a[index - lowerBound];

}

else

{

Error = true;

return 0;

}

}

//это акссесор set.

set

{

if (ok(index))

{

a[index - lowerBound] = value;

Error = false;

}

else Error = true;

}

}

// Возвратить логическое значение true, если

// индекс находится в установленных границах.

private bool ok(int index)

{

if (index >= lowerBound & index <= upperBound) return true;

return false;

}

}

// Продемонстрировать применение массива с произвольно

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

class RangeArrayDemo

{

static void Main()

{

RangeArray ra = new RangeArray(-5, 5);

RangeArray ra2 = new RangeArray(1, 10);

RangeArray ra3 = new RangeArray(-20, -12);

// Использовать объект ra в качестве массива.

Console.WriteLine("Длина массива ra: " + ra.Length);

for (int i = -5; i <= 5; i++)

ra[i] = i;

Console.Write("Содержимок массива ra: ");

for (int i = -5; i <= 5; i++)

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

Console.WriteLine("\n");

// Использовать объект ra2 в качестве массива.

Console.WriteLine("Длина массива ra2: " + ra2.Length);

for (int i = 1; i <= 10; i++)

ra2[i] = i;

Console.Write("Содержимое массива ra2: ");

for (int i = 1; i <= 10; i++)

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

Console.WriteLine("\n");

// Использовать объект raЗ в качестве массива.

Console.WriteLine("Длина массива ra3: " + ra3.Length);

for (int i = -20; i <= -12; i++)

ra3[i] = i;

Console.Write("Содержимое массива ra3: ");

for (int i = -20; i <= -12; i++)

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

 

Console.WriteLine("\n");

}

}

ГЛАВА







Date: 2015-09-02; view: 376; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию