- •Міністерство освіти і науки, молоді та спорту україни
- •Розділ 1. Основи платформи .Net
- •1.1. Основи платформи .Net
- •1.2. Загальні відомості об'єктно-орієнтованого програмування
- •1.3. Середовище Visual Studio .Net
- •1.4 Консольні додатки
- •Розділ 2. Основні поняття мови
- •2.1. Склад мови
- •2.1.1 Алфавіт і лексеми
- •2.1.2. Ідентифікатори і ключові слова
- •2.1.3. Знаки операцій і роздільники
- •2.1.4. Літерали
- •Константи в с#
- •Суфікси цілих і дійсних констант
- •Управляючі послідовності у с#
- •2.1.5. Коментарі
- •2.2. Типи даних
- •2.2.1. Класифікація типів
- •2.2.2. Типи літералів
- •2.2.3. Типи-значення і посилальні типи
- •2.2.4. Упаковка і розпаковування
- •2.3. Рекомендації по програмуванню
- •Розділ 3. Змінні, іменовані константи, операції і вирази
- •3.1. Змінні і іменовані константи
- •3.2. Операції і вирази
- •3.2.1. Перетворення вбудованих арифметичних типів-значень
- •3.2.2. Введення у виключення
- •3.2.3. Основні операції с#
- •Операнд_1 ? операнд_2 : операнд_3.
- •3.3. Лінійні програми (програмування лінійних обчислювальних процесів)
- •3.3.1. Просте введення-виведення даних
- •3.3.2. Математичні функції - клас Math
- •Розділ 4. Оператори
- •4.1. Вирази, блоки
- •4.2. Оператори розгалуження
- •4.2.1. Умовний оператор if
- •4.2.1. Умовний оператор switch
- •4.3. Оператори циклу
- •4.3.1. Цикл з передумовою while
- •4.3.2. Цикл з постумовою do
- •4.3.3. Цикл з параметром for
- •For ( ініціалізація; вираз; модифікації ) оператор;
- •4.3.4. Цикл перебору foreach
- •4.3.5. Рекомендації по вибору оператора циклу
- •4.4. Обробка виняткових ситуацій
- •4.4.1. Оператор try
- •Try блок [ блоки catch ] [ блок finally ]
- •4.4.2. Оператор throw
- •Throw [ вираз ];
- •4.4.3. Клас Exception
- •4.4.4. Оператори checked и unchecked
- •4.5. Рекомендації по програмуванню
- •Розділ 5. Класи: основні поняття
- •5.1. Привласнення і порівняння об'єктів
- •5.2. Дані: поля і константи
- •5.3. Методи
- •5.3.1. Параметри методів
- •5.3.2. Параметри-значення
- •5.3.3. Параметри-посилання
- •5.3.4. Вихідні параметри
- •5.4. Ключове слово this
- •5.5. Конструктори
- •5.6. Властивості
- •[ Атрибути ] [ специфікатори ] тип ім’я_властивості
- •[ Get код_доступа ] [ set код_доступа ]
- •5.7. Рекомендації по програмуванню
- •Розділ 6. Масиви і рядки
- •6.1. Одновимірні масиви
- •6.2. Прямокутні масиви
- •6.3. Ступінчасті масиви
- •6.4. Клас System.Array
- •6.5. Клас Random
- •6.6. Оператор foreach
- •6.7. Масиви об’єктів
- •6.8. Символи і рядки
- •6.8.1. Символи
- •6.8.2. Масиви символів
- •6.8.3. Рядки типу string
- •6.8.4. Форматування рядків
- •6.8.5. Рядки типу StringBuilder
- •6.9. Рекомендації з програмування
- •Розділ 7. Класи: подробиці
- •7.1. Перевантаження методів
- •7.2. Рекурсивні методи
- •7.3. Методи із змінною кількістю аргументів
- •7.4. Метод Main
- •7.5. Індексатори
- •7.6. Операції класу
- •7.6.1. Унарні операції
- •7.6.2. Бінарні операції
- •7.6.3. Операції перетворення типу
- •7.7. Деструктор
- •7.8. Вкладені типи
- •7.9. Рекомендації по програмуванню
- •Розділ 8. Ієрархії класів
- •8.1. Спадкоємство
- •8.2. Віртуальні методи
- •8.3. Абстрактні класи
- •8.4. Безплідні класи
- •8.5. Клас object
- •8.6. Рекомендації по програмуванню
- •Розділ 9. Інтерфейси і структурні типи
- •9.1. Синтаксис інтерфейсу
- •9.2. Реалізація інтерфейсу
- •9.3. Робота з об'єктами через інтерфейси. Операції is і as
- •9.4. Інтерфейси і спадкоємство
- •9.5. Стандартні інтерфейси .Net
- •9.5.1. Порівняння об'єктів (інтерфейс iComparable)
- •9.5.2 Сортування по різних критеріях (інтерфейс iComparer)
- •9.5.3 Перевантаження операцій відношення
- •9.5.4. Клонування об'єктів (інтерфейс iСloneable)
- •9.5.5. Перебір об'єктів (інтерфейс iEnumerable) і ітератори
- •9.6. Структури
- •9.7. Перелічення
- •9.7.1 Операції з переліченнями
- •9.7.2. Базовий клас System.Enum
- •9.8. Рекомендації по програмуванню
- •Розділ 10. Делегати, події і потоки виконання
- •10.1. Делегати
- •10.1.1. Опис делегатів
- •10.1.2. Використання делегатів
- •10.1.3. Патерн “спостерігач”
- •10.1.4. Операції
- •10.1.5. Передача делегатів в методи
- •10.1.6. Обробка виключень при виклику делегатів
- •10.3. Багатопотокові додатки
- •10.3.1. Клас Thread
- •Lock ( вираз ) блок_операторів
- •10.3.2. Асинхронні делегати
- •10.4. Рекомендації по програмуванню
- •Розділ 11. Робота з файлами
- •11.1. Потоки байтів
- •11.2. Асинхронне уведення-виведення
- •11.3. Потоки символів
- •11.4. Двійкові потоки
- •11.5. Консольне уведення-виведення
- •11.6. Робота з каталогами і файлами
- •11.7. Збереження об'єктів (серіалізація)
- •11.8. Рекомендації по програмуванню
- •Розділ 12. Збірки, бібліотеки, атрибути, директиви
- •12.2. Створення бібліотеки
- •12.3. Рефлексія
- •12.4. Атрибути
- •12.5. Простір імен
- •12.6. Директиви препроцесора
- •# Константний_вираз
- •[ #Elif константний_вираз
- •[ #Elif константний_вираз
- •Розділ 13. Структури даних, колекції і класи-прототипи
- •13.1. Абстрактні структури даних
- •13.2. Простір імен System.Collections
- •13.3. Клас ArrayList
- •13.4. Класи-прототипи
- •13.5. Створення класу-прототипу
- •13.6. Узагальнені методи
- •13.7. Часткові типи
- •13.8. Типи, що обнуляються
- •13.9. Рекомендації по програмуванню
- •Розділ 14. Додаткові засоби с#
- •14.1. Небезпечний код
- •Unsafe блок
- •14.1.1. Синтаксис вказівок
- •14.1.2. Перетворення та ініціалізація вказівок
- •14.1.3. Операції з вказівками
- •14.2. Регулярні вирази
- •14.2.1. Метасимволи
- •14.2.2. Класи бібліотеки .Net для роботи з регулярними виразами
- •14.3. Документування у форматі xml
- •Лабораторні роботи
- •Лабораторна робота 5. Одновимірні масиви
- •Лабораторна робота 6. Двовимірні масиви
- •Лабораторна робота 7. Рядки
- •Лабораторна робота 8. Класи і операції
- •Лабораторна робота 9. Спадкоємство
- •Лабораторна робота 10. Структури
- •Лабораторна робота 11. Інтерфейси і параметризовані колекції
- •Список літератури
- •Додатки Додаток 1. Специфікатори формату для рядків с#
Розділ 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.
Опис елементів класу:
• Константи класу зберігають незмінні значення, пов'язані з класом.
• Поля містять дані класу.
• Методи реалізують обчислення або інші дії, що виконуються класом або екземпляром.
• Властивості визначають характеристики класу в сукупності із способами їх завдання і отримання, тобто методами запису і читання.
• Конструктори реалізують дії з ініціалізації екземплярів або класу в цілому.
• Деструктори визначають дії, які необхідно виконати до того, як об'єкт буде знищений.
• Індексатори забезпечують можливість доступу до елементів класу по їх порядковому номеру.
• Операції задають дії з об'єктами за допомогою знаків операцій.
• Події визначають повідомлення, які може генерувати клас.
• Типи - це типи даних, внутрішні по відношенню до класу.
Перші п'ять видів елементів класу ми розглянемо в цьому розділі, а останні - в подальших. Але перш ніж почати вивчення, необхідно поговорити про привласнення і порівняння об'єктів