Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_3_C#.doc
Скачиваний:
2
Добавлен:
18.04.2019
Размер:
436.74 Кб
Скачать

1.5. Властивості

Властивості служать для організації доступу до полів класу. Як правило, властивість пов'язана із закритим полем класу й визначає методи його одержання й установки.

Синтаксис властивості:

[ атрибути ] [ специфікатори ] тип <ім'я властивості>

{

[ get код доступу ]

[ set код_доступу ]

}

Значення специфікаторів для властивостей і методів аналогічні. Найчастіше властивості оголошуються як відкриті (зі специфікатором public), оскільки вони входять в інтерфейс об'єкта.

Код доступу являє собою блоки операторів, які виконуються при одержанні (get) або установці ( set ) властивості. Може бути відсутнім або частина get, або set, але не обидві одночасно. Якщо відсутня частина set, властивість доступно тільки для читання (read-only), якщо відсутня частина get, властивість доступно тільки для запису (write-only).

Приклад 3. Опис властивостей.

public class Button : Control

{

private string caption; // закрите поле, з яким зв'язана властивість

public string Caption // властивість

{

get // спосіб одержання властивості

{

return caption;

}

set // спосіб встановлення властивості

{

if (caption != value)

{

caption = value;

}

}

}

}

При звертанні до властивості автоматично викликаються зазначені в ньому методи читання й встановлення. Синтаксично читання й запис властивості виглядають майже як методи. Метод get повинен містити оператор return, що повертає вираз, для типу якого повинне існувати неявне перетворення до типу властивості. У методі set використається параметр зі стандартним ім'ям value, що містить встановлюване значення.

Загалом, властивість може й не зв'язуватися з полем. Фактично, воно описує один або два методи, які здійснюють деякі дії над даними того ж типу, що й властивість. На відміну від відкритих полів, властивості забезпечують поділ між внутрішнім станом об'єкта і його інтерфейсом й, таким чином, спрощують внесення змін у клас.

1.6. Індексатори

Індексатор являє собою різновид властивості. Якщо в класі є сховане поле, що представляє собою масив, то за допомогою індексатора можна звернутися до елемента цього масиву, використовуючи ім'я об'єкта й номер елемента масиву у квадратних дужках. Іншими словами, індексатор - це такий «розумний» індекс для об'єктів.

Синтаксис індексатора аналогічний синтаксису властивості:

специфікатори тип this [ список_параметрів ]

get код доступу

set код доступу

Специфікатори аналогічні специфікаторам властивостей і методів. Список параметрів містить одне або кілька описів індексів, по яких виконується доступ до елемента. Найчастіше використається один індекс цілого типу. Індексатори в основному застосовуються для створення спеціалізованих масивів, на роботу з якими накладаються які-небудь обмеження. У прикладі 4 створений клас-масив, елементи якого повинні перебувати в діапазоні [0,100]. Крім того, при доступі до елемента перевіряється, чи не вийшов індекс за припустимі границі.

Приклад 4. Використання індексаторів

class Vector

{

private int hIndex;

private int nIndex;

private int kIndex;

public int[] vector;

public Vector(int Index, int StartIndex, int konecIndex)// конструктор классу

{

hIndex = Index;

nIndex = StartIndex;

kIndex = konecIndex;

vector = new int[Index];

for (int i = 0; i < Index; i++) vector[i] = i;

}

public int StartIndex

{

//код доступу

get { return nIndex; }

set { nIndex = value; }

}

public int konecIndex

{

//код доступу

get { return kIndex; }

set { kIndex = value; }

}

public int Index

{

get { return hIndex; }

}

public int this[int NumOfElement]// індексатор

{

get

{

if (NumOfElement >=0 && NumOfElement < hIndex)

{

return vector[NumOfElement];

}

else

throw new IndexOutOfRangeException();// виключення

}

set

{

if (NumOfElement >=0 && NumOfElement < hIndex &&

value >= 0 && value <= 100)

{

vector[NumOfElement] = value;

}

else

throw new IndexOutOfRangeException();

}

}

}

Видно, що індексатори описуються аналогічно властивостям. Завдяки застосуванню індексаторів з об'єктом, що містить у собі масив, можна працювати так само, як зі звичайним масивом. Якщо звертання до об'єкта зустрічається в лівій частині оператора присвоювання (оператор 1), автоматично викликається метод get. Якщо звернення виконується в складі виразу (оператор 2), викликається метод set.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]