- •Мови програмування. Представлення даних.
- •1. Вступ. Про обчислювальну техніку.
- •2. Історія мов програмування.
- •3. Поняття про платформу .Net
- •4. Створення мови програмування с#.
- •5. Представлення даних. Необхідність типізації. Двійкова арифметика.
- •6. Основні поняття програмування.
- •Поняття про інтегроване середовище розробки VisualStudio (на прикладі Visual Studio 2005). Структура c#-програми.
- •1. Основні можливості інтегрованого середовища розробки VisualStudio .Net.
- •2. Структура програми мовою с#.
- •Int I; // Визначили цілу змінну
- •Основні елементи мови с#.
- •1. Основні вбудовані типи мови с#
- •2. Визначення та ініціалізація змінних, область їх видимості.
- •3. Приведення типів.
- •Інакше обидва операнди перетворюються до типу int;
- •4. Літерали (константи) мови с#.
- •5. Операції мови с#.
- •5.1. Арифметичні операції.
- •5.2. Операції інкременту та декременту.
- •5.3. Операції відношення (порівняння).
- •5.4. Логічні операції.
- •5.5. Порозрядні (бітові) операції.
- •5.6. Умовна (тернарна) операція.
- •5.7. Операції присвоєння.
- •5.8. Пріоритет операцій.
- •Основні інструкції керування мови с# – розгалуження та цикли.
- •1. Розгалуження у мові с#
- •2. Цикли у мові с#
- •2.1. Цикл for.
- •2.2. Цикл while.
- •2.3. Цикл do-while.
- •3. Керування виходом із циклів с#
- •Масиви в мові с#.
- •1. Визначення та ініціалізація масиву.
- •2. Цикл foreach
- •3. Багатовимірні масиви.
- •4. Використання деяких методів класу System.Array.
- •5. Масиви масивів. Непрямокутні масиви.
- •Структуровані типи даних (колекції) в мові c#
- •1. Основні структури даних та їх призначення
- •2. Використання списку ArrayList та узагальненого списку List
- •3. Використання асоційованого списку Hashtable та узагальненого словника Dictionary
- •Класи в мові с#.
- •1. Визначення класу.
- •2. Методи класу.
- •3. Методи з параметрами.
- •4. Конструктор класу.
- •Методи в мові с#.
- •1. Передача об’єктів методам.
- •2. Використання модифікаторів для параметрів методів.
- •3. Методи, що повертають об’єкти.
- •Перевантаження методів в мові с#.
- •1. Перевантаження методів.
- •2. Перевантаження конструкторів.
- •3. Використання ключового слова this.
- •4. Деструктор класу.
- •5. Метод Main ().
- •Статичні члени класу.
- •1. Статичні дані-члени класу.
- •2. Статичні методи-члени класу.
- •3. Статичний конструктор класу.
- •4. Статичні класи, локалізація та глобалізація
- •Властивості та індексатори.
- •1. Властивості.
- •2. Індексатори.
- •Спадкування в мові с#.
- •1. Поняття про спадкування та ієрархію класів.
- •2. Спадкування та правила доступу до членів класів.
- •3. Конструктори базового та похідних класів.
- •4. Посилання на екземпляри базового та похідних класів.
- •5. Поняття про поліморфізм.
- •6. Віртуальні функції – більш детальний погляд.
- •7. Абстрактні методи та класи.
- •Перевантаження операцій в мові с#.
- •1. Загальні відомості.
- •2. Перевантаження бінарних арифметичних операцій.
- •3. Перевантаження унарних операцій.
- •4. Перевантаження операцій відношення.
- •5. Перевантаження логічних операцій.
- •6. Підсумкові зауваження.
- •Структури та переліки в мові с#.
- •1. Структури.
- •2. Переліки.
- •Делегати, події та обробники подій
- •1. Делегати (delegate).
- •2. Події та їх обробники.
- •Атрибути та їх використання
- •Рекомендована література
Спадкування в мові с#.
1. Поняття про спадкування та ієрархію класів.
Одним із трьох основних принципів об’єктно-орієнтованого програмування є спадкування, яке забезпечує можливість повторного використання існуючих класів. Мова C# надає можливості створювати нові класи, що є різновидами вже існуючих класів. Такий клас містить у собі всі члени так званого базового або батьківського класу, додаючи у нього особливості власного функціонування. Клас, який створюється на основі базового, називається похідним або дочірнім класом (інколи говорять: класом-нащадком). Це так зване класичне спадкування, яке встановлює між похідним та базовим класом відношення «Є»: похідний клас є різновидом базового. Зрозуміло, що і похідний клас може стати базовим при створенні наступного похідного класу від нього. Все гроно класів, які мають спільний корінь, разом із зв’язками між ними, називається ієрархією класів. Співвідношення між базовим та похідним класом позначається діаграмою, наведеною на малюнку.
Визначення похідного класу має наступний синтаксис:
class <ідентифікатор базового класу>
{
// код базового класу
}
class <ідентифікатор похідного класу> : <ідентифікатор базового класу>
{
// код похідного класу
}
Наведемо приклад створення похідного класу. Базовий клас Building буде визначати деяку будівлю. Оскільки офісний будинок та житловий будинки є різновидами будівлі, для них можна визначити похідні класи OfficeBuilding та LivingBuilding, додавши у клас Building необхідну функціональність.
namespace DerivativeClass
{
class Building
{ // базовий клас - будинок
public int floors; // кількість поверхів
public double area; // площа
}
class OfficeBuilding : Building
{ // похідний клас - офісний будинок
public int numOffices; // кількість офісів
}
class LivingBuilding : Building
{ // ще один похідний клас - житловий будинок
public int numFlats; // кількість квартир
public int numPeople; // кількість жителів
}
class Program
{
static void Main()
{
Building b = new Building(); // створюємо будинок
b.area = 1000; // визначаємо площу
b.floors = 10; // визначаємо кількість поверхів
// створюємо офісний будинок
OfficeBuilding ob = new OfficeBuilding();
ob.area = 500; // визначаємо площу
ob.floors = 3; // визначаємо кількість поверхів
ob.numOffices = 8; // визначаємо кількість офісів
// створюємо житловий будинок
LivingBuilding lb = new LivingBuilding();
lb.area = 2000; // визначаємо площу
lb.floors = 5; // визначаємо кількість поверхів
lb.numFlats = 20; // визначаємо кількість квартир
lb.numPeople = 75; // визначаємо кількість мешканців
Console.WriteLine(
"Будинок : поверхiв {0} площа {1}", b.floors, b.area);
Console.WriteLine(
"Офiсний будинок : поверхiв {0} площа {1} офiсiв {2}",
ob.floors, ob.area, ob.numOffices);
Console.WriteLine(
"Житловий будинок : поверхiв {0} площа {1} квартир {2}
мешканцiв {3}", lb.floors, lb.area, lb.numFlats,
lb.numPeople);
}
}
}
Як видно з даного прикладу, об’єкти класів OfficeBuilding та LivingBuilding крім власних членів мають і всі члени базового класу Building. Хоча в даному прикладі розглядались лише дані-члени, все сказане переноситься і на інші члени класів – методи, властивості, індексатори. Правда, такий спосіб спадкування має місце лише у випадку, коли члени базового класу відкриті – public.
Зауваження.
-
Правила спадкування мови С# забороняють використовувати два або більше класів як базові – множинне спадкування, подібне до існуючого в С++, мова С# не підтримує.
-
Якщо при визначенні класу не вказано базовий клас, то компілятор вважає, що базовим класом є System.Object. Тобто наступні два визначення класів еквівалентні :
class MyClass : Object // клас успадкований від System.Object
{
// визначення класу
}
та
class MyClass // клас успадкований від System.Object
{
// визначення класу
}
Таким чином, всі створені класи успадковують методи від класу System.Object.
-
Якщо при визначенні класу вказано службове слово sealed, це означає заборону спадкування від такого класу, тобто наступний класс не може бути використаний як базовий:
// від цього класу не можна утворити похідний клас
sealed class MyClass
{
// визначення класу
}