Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие NET.doc
Скачиваний:
26
Добавлен:
07.03.2016
Размер:
4.63 Mб
Скачать

Розділ 5. Класи: основні поняття

Всі програми, які приведені в роботі, складалися з одного класу і єдиним методом Main. Починаючи з цього розділу, розглядається вивчення створення і використання класів.

Клас є типом даних, визначуваним користувачем. Він має бути однією логічною суттю, наприклад, бути моделлю реального об'єкту або процесу. Елементами класу є дані і функції, призначені для їх обробки.

Опис класу містить ключове слово class, за яким слідує його ім'я, а далі у фігурних дужках - тіло класу, тобто список його елементів. Крім того, для класу можна задати його базові класи (предки) і ряд необов'язкових атрибутів і специфікаторів, що визначають різні характеристики класу:

[ атрибути ] [ специфікатори ] class ім'я_класу [ : предки ]

тіло класу

Як бачите, обов'язковими є тільки ключове слово class, а також ім'я і тіло класу. Ім'я класу задається програмістом за загальними правилами С#. Тіло класу - це список описів його елементів, взятий у фігурні дужки. Список може бути порожнім, якщо клас не містить жодного елементу. Таким чином, простий опис класу може виглядати так:

class Demo {}

Необов'язкові атрибути задають додаткову інформацію про клас. Оскільки ми вивчаємо поки основні поняття про клас, то відкладемо розгляд атрибутів до розділу 12.

Специфікатори визначають властивості класу, а також доступність класу для інших елементів програми. Можливі значення специфікаторів перераховані в таблиці 5.1.

Таблиця 5.1

Специфікатори класу

Специфікатор

Опис

1

new

Використовується для вкладених класів. Задає новий опис класу замість успадкованого від предка. Застосовується в ієрархіях об'єктів

2

public

Доступ не обмежений

3

protected

Використовується для вкладених класів. Доступ тільки з елементів даного класу і похідних класів

4

internal

Доступ тільки з даної програми (збірки)

5

protected internal

Доступ тільки з даного класу і похідних класів або з даної програми (збірки)

6

private

Використовується для вкладених класів. Доступ тільки з елементів класу, усередині якого описаний даний клас

Продовження таблиці 5.1

Специфікатор

Опис

7

abstract

Абстрактний клас. Застосовується в ієрархіях об'єктів

8

sealed

Безплідний клас. Застосовується в ієрархіях об'єктів

9

static

Статичний клас

Клас можна описувати безпосередньо усередині простору імен або усередині іншого класу. У останньому випадку клас називається вкладеним. Залежно від місця опису класу деякі з цих специфікаторів можуть бути заборонені.

Специфікатори 2-6 називаються специфікаторами доступу. Вони визначають, звідки можна безпосередньо звертатися до даного класу. Специфікатори доступу можуть бути присутніми в описі тільки у варіантах, приведених в таблиці, а також можуть комбінуватися з рештою специфікаторів.

У цьому розділі ми вивчатимемо класи, які описуються в просторі імен безпосередньо (тобто не вкладені класи). Для таких класів допускаються тільки два специфікатори: public і internal, за умовчанням, тобто якщо жоден специфікатор доступу не вказаний, мається на увазі специфікатор internal.

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

Об'єкти створюються явним або неявним чином, тобто або програмістом, або системою. Програміст створить екземпляр класу за допомогою операції new, наприклад:

Demo a = new Demo ( ); // створення екземпляра класуDemo

Demo b = new Demo ( ); // створення іншого екземпляра класуDemo

Як ви пам'ятаєте, клас відноситься до посилальних типів даних, пам'ять під яких виділяється. Таким чином, змінні х і у зберігають не самі об'єкти, а посилання на об'єкти, тобто їх адреси. Якщо достатній для зберігання об'єкту об'єм пам'яті виділити не вдалося, операція new генерує виключення Outofmemory-exception. Рекомендується передбачати обробку цього виключення в програмах, що працюють з об'єктами великого об'єму.

Для кожного об'єкту при його створенні в пам'яті виділяється окрема область, в якій зберігаються його дані. Крім того, в класі можуть бути присутніми статичні елементи, які існують в єдиному екземплярі для всіх об'єктів класу. Часто статичні дані називають даними класу, а останні - даними екземпляра.

Функціональні елементи класу не тиражуються, тобто завжди зберігаються в єдиному екземплярі. Для роботи з даними класу використовуються методи класу (статичні методи), для роботи з даними екземпляра - методи екземпляра, або просто методи.

До цих пір ми використовували в програмах тільки один вид функціональних елементів класу - методи. Поля і методи є основними елементами класу. Крім того, в класі можна задавати цілу гамму інших елементів, приведених на рис. 5.1.

Опис елементів класу:

• Константи класу зберігають незмінні значення, пов'язані з класом.

• Поля містять дані класу.

• Методи реалізують обчислення або інші дії, що виконуються класом або екземпляром.

• Властивості визначають характеристики класу в сукупності із способами їх завдання і отримання, тобто методами запису і читання.

• Конструктори реалізують дії з ініціалізації екземплярів або класу в цілому.

• Деструктори визначають дії, які необхідно виконати до того, як об'єкт буде знищений.

• Індексатори забезпечують можливість доступу до елементів класу по їх порядковому номеру.

• Операції задають дії з об'єктами за допомогою знаків операцій.

• Події визначають повідомлення, які може генерувати клас.

• Типи - це типи даних, внутрішні по відношенню до класу.

Перші п'ять видів елементів класу ми розглянемо в цьому розділі, а останні - в подальших. Але перш ніж почати вивчення, необхідно поговорити про привласнення і порівняння об'єктів