SlideShare a Scribd company logo
.NET Framework і C#
Модуль 9. Наслідування
В цьому модулі:
 Наслідування в C#;
 Використання ключового слова seald;
 Використання посилань на базовий клас;
 Віртуальні методи;
 Абстрактний клас;
 Аналіз базового класу Object;
 Упакування, розпакування (boxing, unboxing);
2
Andriy Gladkyy
KspDevelop@gmail.com
Наслідування в C#.
Аналіз механізмів наслідування в C#
 Існує два види наслідування:
◦ Наслідування типу – тип наслідник отримує всі методи і
властивості базового класу
◦ Наслідування інтерфейсу – новий тип отримує від базового
класу сигнатуру методів без їх реалізації
 Всі класи, для яких не вказаний базовий клас,
наслідуються від класу System.Object
 C# не підтримує множинного наслідування. Клас в
C# може бути наслідником тільки одного класу, але
при цьому може реалізувати декілька інтерфейсів.
Andriy Gladkyy
KspDevelop@gmail.com 3
Andriy Gladkyy
KspDevelop@gmail.com 4
Специфікатори доступу при наслідувані
 private – нащадок не може користуватись даними базового класу
 protected – дані доступні лише класам наслідникам
 public – дані відкриті для будь яких класів
 internal – дані доступні лише в межах збірки
 protected internal – дані доступні класам наслідникам і в межах збірки
Andriy Gladkyy
KspDevelop@gmail.com 5
Andriy Gladkyy
KspDevelop@gmail.com 6
Демонстрація
Особливості використання конструкторів
при наслідувані
 При створені класу-нащадка викликається цілий ряд
конструкторів
 Якщо в класі наслідника нам потрібно викликати
конструктор базового класу, то необхідно
використати ключове слово base ().
Andriy Gladkyy
KspDevelop@gmail.com 7
public MyClass() : base()
Andriy Gladkyy
KspDevelop@gmail.com 8
Демонстрація
Приховування імен при наслідувані
Приховування імен відбувається, коли в базовому класі
і в класі насліднику оголошені методи з однаковим
іменем
При приховувані імен потрібно використовувати
ключове слово new
Andriy Gladkyy
KspDevelop@gmail.com 9
public new void Work(){ }
Andriy Gladkyy
KspDevelop@gmail.com 10
Демонстрація
Ключове слово base
Andriy Gladkyy
KspDevelop@gmail.com 11
 Використовується для:
◦ доступу до даних базового класу із похідного
◦ для виклику метода базового класу при перевизначені його в класі насліднику. При
цьому метод базового класу має бути віртуальним.
◦ При створенні конструктора класу наслідника, який повинен викликати конструктор
базового класу
public virtual void Method() { }
public MyClass() : base()
Andriy Gladkyy
KspDevelop@gmail.com 12
Демонстрація
Наслідування виключень
 Користувацькі класи виключень повинні наслідується від класу
ApplicationException
 Класи наслідники повинні як мінімум мати 4 конструктори:
◦ Один за замовчуванням;
◦ Задає властивість повідомленню
◦ Задає властивість Message і InnerException
◦ Для серіалізації виключень
Andriy Gladkyy
KspDevelop@gmail.com 13
ImpossibilityOfPerformanceException : ApplicationException
Andriy Gladkyy
KspDevelop@gmail.com 14
Andriy Gladkyy
KspDevelop@gmail.com 15
Розглянемо класи виключень неможливості виконати роботу
службовцями
 Базовий клас ImpossibilityOfPerformanceException
 Три класи наслідники:
◦ Клас виключення, що службовець не може виконати роботу у зв’язку з тим,
що зайнятий виконанням іншої роботи: EmployeeIsBusyException
◦ Клас виключення не можливості виконати роботу по причині форс-
мажорних випадків: ForceMajeureException
◦ Клас виключення не можливості виконати роботу по причині недостатньої
кількості ресурсів або помилки інструментів: CrunchException
 Використаємо вищеописані класи в класі Employee
Andriy Gladkyy
KspDevelop@gmail.com 16
Демонстрація
Використання ключового слова
sealed
Andriy Gladkyy
KspDevelop@gmail.com 17
Andriy Gladkyy
KspDevelop@gmail.com 18
Демонстрація
Використання посилань на базовий клас
 Коли посилання на похідний клас присвоюється
посиланню на базовий клас, ми отримуємо доступ
до тих частин об’єкту, які присутні в базовому класі.
Andriy Gladkyy
KspDevelop@gmail.com 19
A nA = new B(23, 45)
nA.Print();
Andriy Gladkyy
KspDevelop@gmail.com 20
Демонстрація
Віртуальні методи
Що таке віртуальний метод
 Коли необхідно перевизначити метод базового класу в класі
наслідника
 Коли необхідно перевизначити властивість базового класу
 Обмеження для віртуальних методів:
◦ Поля і статичні методи не можуть бути оголошені як віртуальні
◦ Застосування віртуальних методів дозволяє реалізувати механізм пізнього зв’язування
◦ На етапі компіляції будується лише таблиця віртуальних методів, а конкретний адрес
метода визначається на етапі виконання.
 Під час виклику метода класу діють наступні правила:
◦ Для віртуального методу викликається метод, який відповідає типу об’єкта, на який
вказує посилання
◦ Для не віртуального методу викликається метод, що відповідає типу самого посилання.
Andriy Gladkyy
KspDevelop@gmail.com 21
Віртуальні методи
Необхідність використання віртуальних методів
 Віртуальні методи дозволяють визначити в базовому класі методи,
реалізація яких є загальною для всіх похідних класів і методи, які
можна перевизначити.
 Це дозволяє підтримувати динамічний поліморфізм.
Andriy Gladkyy
KspDevelop@gmail.com 22
Віртуальні методи
Перевизначеня віртуальних методів
 Для того щоб перевизначити метод в класі-насліднику потрібно
використати ключове слово override.
Andriy Gladkyy
KspDevelop@gmail.com 23
public override string ToString()
{
//……..
}
Andriy Gladkyy
KspDevelop@gmail.com 24
Демонстрація
Абстрактний класи
 Абстрактний клас – це клас екземпляр якого створити не можна, але його
можуть наслідувати інші класи
Andriy Gladkyy
KspDevelop@gmail.com 25
public abstract class Employee
{
public virtual void Work();
}
Andriy Gladkyy
KspDevelop@gmail.com 26
Демонстрація
Аналіз базового класу object
 Так як кожний тип в C# наслідує клас object, то його методи будуть
доступні для будь якого класу
Andriy Gladkyy
KspDevelop@gmail.com 27
Метод Призначення
public virtual bool Equals
(object ob1)
В якості параметра отримує об’єкт типу object. Повертає true,
якщо об’єкт, що викликає метод, і об’єкт, що передається в якості
параметра, однакові. Інакше повертає false.
public static bool Equals
(object ob1, object ob2)
В якості параметра отримує два об’єкта типу object. Повертає
true, якщо об’єкти однакові, інакше повертає false.
protected Finalize () Діє як збирач сміття. Цей метод використовують для очищення
ресурсів, які займає тип посилання.
public virtual int
GetHashCode()
Повертає хеш-код викликаючого об’єкта
public Type GetType() Повертає тип викликаючого об’єкта
protected object
MemberwiseClone()
Створює копію викликаючого об’єкта, в яку копіюються всі
члени класу, але при цьому не копіюються об’єкти, на які
посилаються ці члени
public static bool
ReferanceEquals (object ob1,
object ob2)
Повертає true, якщо об’єкти ob1 і ob2 посилаються на один і
той самий об’єкт. Якщо вони посилаються на різні об’єкти то,
повертається false.
public virtual string
ToString()
Викликає рядок, який описує викликаючий об’єкт
Пакування, розпакування (boxing,
unboxing)
 Так як кожний тип в C# наслідує клас object, то , будь який тип можна
привести до типу object, і навпаки.
 Процес упакування відбувається не явно
 При розпаковці потрібно виконувати явне приведення типів:
◦ Точно знати тип упакованої зміни
◦ Створити зміну необхідного типу і присвоїти їй приведене до цього типу запаковану
змінну.
Andriy Gladkyy
KspDevelop@gmail.com 28
object ob1;
int x = 12;
ob1 = x; //boxing
int a = (int)ob1; //unboxing
Розробити абстрактний клас Vehicle (транспортний засіб). На його основі
реалізувати класи Plane (літак) Car (автомобіль) Ship (судно). Класи
повинні мати можливість задавати і отримувати координати і параметри
засобів пересування (вартість, швидкість, рік випуску і т.д.) за допомогою
властивостей.
Для літака повинна бути визначена висота, для літака і судна – кількість
пасажирів, для корабля – порт приписки. Динамічні характеристики
задавати за допомогою методів. Створити метод для роздруківки стану
транспортного засобу (кількість пасажир, порт, аеропорт і т.д.)
Andriy Gladkyy
KspDevelop@gmail.com 29

More Related Content

What's hot

System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. ProcessesAndrii Hladkyi
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. SerializationAndrii Hladkyi
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14Andrii Hladkyi
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16Andrii Hladkyi
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2eleksdev
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8Andrii Hladkyi
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3eleksdev
 
08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOPeleksdev
 
12 Architecture
12 Architecture12 Architecture
12 Architectureeleksdev
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17Andrii Hladkyi
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 

What's hot (11)

System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. Processes
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. Serialization
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3
 
08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOP
 
12 Architecture
12 Architecture12 Architecture
12 Architecture
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 

Viewers also liked

Viewers also liked (13)

Wcf module 3.8
Wcf module 3.8Wcf module 3.8
Wcf module 3.8
 
Uml module 1
Uml module 1Uml module 1
Uml module 1
 
Uml module 2
Uml module 2Uml module 2
Uml module 2
 
Net framework і c# module 4
Net framework і c# module 4Net framework і c# module 4
Net framework і c# module 4
 
Wcf module 3.7
Wcf module 3.7Wcf module 3.7
Wcf module 3.7
 
Net framework і c# module 13
Net framework і c# module 13Net framework і c# module 13
Net framework і c# module 13
 
Ado.net module 6 entity framework
Ado.net module 6 entity frameworkAdo.net module 6 entity framework
Ado.net module 6 entity framework
 
System programing module 2
System programing module 2System programing module 2
System programing module 2
 
System programing module 3
System programing module 3System programing module 3
System programing module 3
 
Uml module 6
Uml module 6Uml module 6
Uml module 6
 
Uml module 5
Uml module 5Uml module 5
Uml module 5
 
Net framework і c# lesson1
Net framework і c# lesson1Net framework і c# lesson1
Net framework і c# lesson1
 
Design pattern module 1
Design pattern module 1Design pattern module 1
Design pattern module 1
 

Similar to Net framework і c# module 9

Similar to Net framework і c# module 9 (10)

Net framework і c# module 15
Net framework і c# module 15Net framework і c# module 15
Net framework і c# module 15
 
ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
Net framework і c# module 10
Net framework і c# module 10Net framework і c# module 10
Net framework і c# module 10
 
Oop - TTm
Oop - TTmOop - TTm
Oop - TTm
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
Patterns.pptx
Patterns.pptxPatterns.pptx
Patterns.pptx
 
01 Incapsulation
01 Incapsulation01 Incapsulation
01 Incapsulation
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
Net framework і c# lesson1
Net framework і c# lesson1Net framework і c# lesson1
Net framework і c# lesson1
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 

More from Andrii Hladkyi (14)

Net Framework and c# Lesson 1
Net Framework and c# Lesson 1Net Framework and c# Lesson 1
Net Framework and c# Lesson 1
 
Wpf module 2
Wpf module 2Wpf module 2
Wpf module 2
 
Wpf module 1
Wpf module 1Wpf module 1
Wpf module 1
 
Msp module 3
Msp module 3Msp module 3
Msp module 3
 
Msp module 2
Msp module 2Msp module 2
Msp module 2
 
Msp module 1
Msp module 1Msp module 1
Msp module 1
 
Ado.net module 2
Ado.net module 2Ado.net module 2
Ado.net module 2
 
Ado.net module 1
Ado.net module 1Ado.net module 1
Ado.net module 1
 
Design pattern module 1
Design pattern module 1Design pattern module 1
Design pattern module 1
 
Win api module_2.0_gdi+
Win api module_2.0_gdi+Win api module_2.0_gdi+
Win api module_2.0_gdi+
 
Win api module_1.1_ok
Win api module_1.1_okWin api module_1.1_ok
Win api module_1.1_ok
 
Win api module_6.2
Win api module_6.2Win api module_6.2
Win api module_6.2
 
Uml module 4
Uml module 4Uml module 4
Uml module 4
 
Uml module 3
Uml module 3Uml module 3
Uml module 3
 

Net framework і c# module 9

  • 1. .NET Framework і C# Модуль 9. Наслідування
  • 2. В цьому модулі:  Наслідування в C#;  Використання ключового слова seald;  Використання посилань на базовий клас;  Віртуальні методи;  Абстрактний клас;  Аналіз базового класу Object;  Упакування, розпакування (boxing, unboxing); 2 Andriy Gladkyy KspDevelop@gmail.com
  • 3. Наслідування в C#. Аналіз механізмів наслідування в C#  Існує два види наслідування: ◦ Наслідування типу – тип наслідник отримує всі методи і властивості базового класу ◦ Наслідування інтерфейсу – новий тип отримує від базового класу сигнатуру методів без їх реалізації  Всі класи, для яких не вказаний базовий клас, наслідуються від класу System.Object  C# не підтримує множинного наслідування. Клас в C# може бути наслідником тільки одного класу, але при цьому може реалізувати декілька інтерфейсів. Andriy Gladkyy KspDevelop@gmail.com 3
  • 5. Специфікатори доступу при наслідувані  private – нащадок не може користуватись даними базового класу  protected – дані доступні лише класам наслідникам  public – дані відкриті для будь яких класів  internal – дані доступні лише в межах збірки  protected internal – дані доступні класам наслідникам і в межах збірки Andriy Gladkyy KspDevelop@gmail.com 5
  • 7. Особливості використання конструкторів при наслідувані  При створені класу-нащадка викликається цілий ряд конструкторів  Якщо в класі наслідника нам потрібно викликати конструктор базового класу, то необхідно використати ключове слово base (). Andriy Gladkyy KspDevelop@gmail.com 7 public MyClass() : base()
  • 9. Приховування імен при наслідувані Приховування імен відбувається, коли в базовому класі і в класі насліднику оголошені методи з однаковим іменем При приховувані імен потрібно використовувати ключове слово new Andriy Gladkyy KspDevelop@gmail.com 9 public new void Work(){ }
  • 11. Ключове слово base Andriy Gladkyy KspDevelop@gmail.com 11  Використовується для: ◦ доступу до даних базового класу із похідного ◦ для виклику метода базового класу при перевизначені його в класі насліднику. При цьому метод базового класу має бути віртуальним. ◦ При створенні конструктора класу наслідника, який повинен викликати конструктор базового класу public virtual void Method() { } public MyClass() : base()
  • 13. Наслідування виключень  Користувацькі класи виключень повинні наслідується від класу ApplicationException  Класи наслідники повинні як мінімум мати 4 конструктори: ◦ Один за замовчуванням; ◦ Задає властивість повідомленню ◦ Задає властивість Message і InnerException ◦ Для серіалізації виключень Andriy Gladkyy KspDevelop@gmail.com 13 ImpossibilityOfPerformanceException : ApplicationException
  • 15. Andriy Gladkyy KspDevelop@gmail.com 15 Розглянемо класи виключень неможливості виконати роботу службовцями  Базовий клас ImpossibilityOfPerformanceException  Три класи наслідники: ◦ Клас виключення, що службовець не може виконати роботу у зв’язку з тим, що зайнятий виконанням іншої роботи: EmployeeIsBusyException ◦ Клас виключення не можливості виконати роботу по причині форс- мажорних випадків: ForceMajeureException ◦ Клас виключення не можливості виконати роботу по причині недостатньої кількості ресурсів або помилки інструментів: CrunchException  Використаємо вищеописані класи в класі Employee
  • 19. Використання посилань на базовий клас  Коли посилання на похідний клас присвоюється посиланню на базовий клас, ми отримуємо доступ до тих частин об’єкту, які присутні в базовому класі. Andriy Gladkyy KspDevelop@gmail.com 19 A nA = new B(23, 45) nA.Print();
  • 21. Віртуальні методи Що таке віртуальний метод  Коли необхідно перевизначити метод базового класу в класі наслідника  Коли необхідно перевизначити властивість базового класу  Обмеження для віртуальних методів: ◦ Поля і статичні методи не можуть бути оголошені як віртуальні ◦ Застосування віртуальних методів дозволяє реалізувати механізм пізнього зв’язування ◦ На етапі компіляції будується лише таблиця віртуальних методів, а конкретний адрес метода визначається на етапі виконання.  Під час виклику метода класу діють наступні правила: ◦ Для віртуального методу викликається метод, який відповідає типу об’єкта, на який вказує посилання ◦ Для не віртуального методу викликається метод, що відповідає типу самого посилання. Andriy Gladkyy KspDevelop@gmail.com 21
  • 22. Віртуальні методи Необхідність використання віртуальних методів  Віртуальні методи дозволяють визначити в базовому класі методи, реалізація яких є загальною для всіх похідних класів і методи, які можна перевизначити.  Це дозволяє підтримувати динамічний поліморфізм. Andriy Gladkyy KspDevelop@gmail.com 22
  • 23. Віртуальні методи Перевизначеня віртуальних методів  Для того щоб перевизначити метод в класі-насліднику потрібно використати ключове слово override. Andriy Gladkyy KspDevelop@gmail.com 23 public override string ToString() { //…….. }
  • 25. Абстрактний класи  Абстрактний клас – це клас екземпляр якого створити не можна, але його можуть наслідувати інші класи Andriy Gladkyy KspDevelop@gmail.com 25 public abstract class Employee { public virtual void Work(); }
  • 27. Аналіз базового класу object  Так як кожний тип в C# наслідує клас object, то його методи будуть доступні для будь якого класу Andriy Gladkyy KspDevelop@gmail.com 27 Метод Призначення public virtual bool Equals (object ob1) В якості параметра отримує об’єкт типу object. Повертає true, якщо об’єкт, що викликає метод, і об’єкт, що передається в якості параметра, однакові. Інакше повертає false. public static bool Equals (object ob1, object ob2) В якості параметра отримує два об’єкта типу object. Повертає true, якщо об’єкти однакові, інакше повертає false. protected Finalize () Діє як збирач сміття. Цей метод використовують для очищення ресурсів, які займає тип посилання. public virtual int GetHashCode() Повертає хеш-код викликаючого об’єкта public Type GetType() Повертає тип викликаючого об’єкта protected object MemberwiseClone() Створює копію викликаючого об’єкта, в яку копіюються всі члени класу, але при цьому не копіюються об’єкти, на які посилаються ці члени public static bool ReferanceEquals (object ob1, object ob2) Повертає true, якщо об’єкти ob1 і ob2 посилаються на один і той самий об’єкт. Якщо вони посилаються на різні об’єкти то, повертається false. public virtual string ToString() Викликає рядок, який описує викликаючий об’єкт
  • 28. Пакування, розпакування (boxing, unboxing)  Так як кожний тип в C# наслідує клас object, то , будь який тип можна привести до типу object, і навпаки.  Процес упакування відбувається не явно  При розпаковці потрібно виконувати явне приведення типів: ◦ Точно знати тип упакованої зміни ◦ Створити зміну необхідного типу і присвоїти їй приведене до цього типу запаковану змінну. Andriy Gladkyy KspDevelop@gmail.com 28 object ob1; int x = 12; ob1 = x; //boxing int a = (int)ob1; //unboxing
  • 29. Розробити абстрактний клас Vehicle (транспортний засіб). На його основі реалізувати класи Plane (літак) Car (автомобіль) Ship (судно). Класи повинні мати можливість задавати і отримувати координати і параметри засобів пересування (вартість, швидкість, рік випуску і т.д.) за допомогою властивостей. Для літака повинна бути визначена висота, для літака і судна – кількість пасажирів, для корабля – порт приписки. Динамічні характеристики задавати за допомогою методів. Створити метод для роздруківки стану транспортного засобу (кількість пасажир, порт, аеропорт і т.д.) Andriy Gladkyy KspDevelop@gmail.com 29