C# Наслідування та поліморфізм із прикладами програм

⚡ Розумний підсумок

Успадкування та поліморфізм у C# – це два основні об'єктно-орієнтовані принципи. Успадкування дозволяє дочірньому класу повторно використовувати поля та методи батьківського класу, тоді як поліморфізм дозволяє одному імені методу приймати багато форм.

  • 🧬 успадкування: Дочірній клас успадковує поля та методи батьківського класу та може додавати свої власні.
  • 🔒 Захищені учасники: Позначення батьківських полів як захищених дозволяє похідному дочірньому класу повторно використовувати їх безпосередньо.
  • 🧩 Поліморфізм: Одне ім'я методу може мати багато форм, тому окремий виклик поводиться по-різному залежно від контексту.
  • 🔀 Перевантаження методу: Кілька методів мають одну назву, але відрізняються параметрами, що вирішуються під час компіляції.
  • 🧱 Code повторне використання: Обидва принципи виключають дублювання коду та забезпечують узгодженість пов'язаних класів.
  • 🤖 Допомога AI: GitHub Copilot створює скаффоли базових та похідних класів; ML.NET повторно використовує ієрархії класів як вхідні дані моделі.

Успадкування та поліморфізм у C#

Що таке успадкування в C#?

Спадкування є важливою концепцією C#. Спадкування — це концепція, у якій ви визначаєте батьківські класи та дочірні класи. Дочірні класи успадковують методи та властивості батьківського класу, але в той же час вони також можуть змінювати поведінку методів, якщо потрібно. Дочірній клас також може визначати власні методи, якщо потрібно.

Давайте краще зрозуміємо успадкування C# на прикладі програми:

Приклад успадкування C#

Давайте тепер подивимося, як ми можемо включити концепцію успадкування в наш код.

Крок 1) Першим кроком є ​​зміна коду для нашого навчального класу. На цьому кроці ми додаємо наведений нижче код до файлу Tutorial.cs.

Приклад успадкування C#

Зауважте, що зараз нам потрібно додати модифікатор доступу «protected» до полів TutorialID і TutorialName.

Пам’ятайте, що ми згадували цей модифікатор доступу в Посібник з модифікатора доступуНу, тут ви можете побачити сенс цього. Тільки за наявності цього модифікатора доступу (захищеного), дочірній клас зможе використовувати поля батьківського класу.

Крок 2) Другий крок – додати наш новий дочірній клас. Назва цього класу буде «Guru99Tutorial”. На цьому кроці ми додаємо наведений нижче код до файлу Tutorial.cs. Код слід розмістити після визначення класу Tutorial.

Приклад успадкування C#

Code Пояснення:

  1. Перший крок — створити GuruДочірній клас 99Tutorial. Також слід зазначити, що цей клас буде дочірнім класом класу Tutorial. Це робиться за допомогою ключового слова ':'.
  2. Далі ми визначаємо метод RenameTutorial. Він використовуватиметься для перейменування поля TutorialName. Цей метод приймає рядкову змінну, яка містить нову назву посібника.
  3. Потім ми призначили параметр pNewName до поля TutorialName. Примітка:: – Навіть якщо ми не визначили поле TutorialName у «GuruУ класі «99Tutorial» ми все ще маємо доступ до цього поля. Це пов’язано з тим, що «Guru«99Tutorial» – це дочірній клас класу Tutorial. А оскільки ми зробили поля класу Tutorial захищеними, цей клас може отримати до них доступ.

Крок 3) Останній крок – змінити наш основний файл Program.cs. У нашій консольній програмі ми створимо об’єкт GuruКлас 99Tutorial. З цим об'єктом ми викличемо метод RenameTutorial. Потім ми відобразимо поле TutorialName за допомогою методу GetTutorial.

Приклад успадкування C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 public class Tutorial
 {
  protected int TutorialID; 
  protected string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  
  public String GetTutorial()
  {
   return TutorialName;
  }
 }
  public class Guru99Tutorial:Tutorial
  {
   public void RenameTutorial(String pNewName)
   {
    TutorialName=pNewName;
   }
  
  static void Main(string[] args) 
  {
   Guru99Tutorial pTutor=new Guru99Tutorial();
   
   pTutor.RenameTutorial(".Net by Guru99");
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Пояснення:

  1. Перший крок — створити об'єкт для GuruКлас 99Tutorial. Це робиться за допомогою ключового слова 'new'. Зверніть увагу, що цього разу ми не створюємо об'єкт класу Tutorial.
  2. Ми використовуємо метод RenameTutorial з GuruКлас 99Tutorial для зміни поля TutorialName. Ми передаємо рядок “.Net by Guru99” до методу RenameTutorial.
  3. Потім ми викликаємо метод GetTutorial. Зауважте, що хоча цей метод не визначено в GuruУ класі 99Tutorial ми все ще можемо отримати доступ до цього методу. Вивід методу GetTutorial потім відображається в консолі через метод Console.WriteLine.

Якщо наведений вище код введено належним чином і програма виконана успішно, буде показано наступний вихід.

вихід:

Приклад успадкування C#

З виводу чітко видно, що поле TutorialName було перейменовано на «.Net» Guru99”. Це стало можливим завдяки методу RenameTutorial, викликаному дочірнім класом.

Що таке поліморфізм у C#?

Поліморфізм in C# – це концепція ООП, де одне ім'я може мати багато форм. Наприклад, у вас є смартфон для спілкування. Режим спілкування, який ви обираєте, може бути будь-яким. Це може бути дзвінок, текстове повідомлення, графічне повідомлення, пошта тощо. Отже, мета спільна, тобто спілкування, але їхній підхід відрізняється. Це називається поліморфізмом.

Ви краще зрозумієте поліморфізм C# за прикладом програми нижче:

Приклад поліморфізму C#

Давайте тепер подивимося, як ми можемо включити концепцію поліморфізму в наш код.

Крок 1) Першим кроком є ​​зміна коду для нашого навчального класу. На цьому кроці ми додаємо наведений нижче код до файлу Tutorial.cs.

Приклад поліморфізму C#

Code Пояснення:

1 та 2) Перший крок такий самий, як і в наших попередніх прикладах. Ми зберігаємоping визначення методу SetTutorial таким, яким воно є.

3) Цей метод встановлює TutorialID і TutorialName на основі параметрів pID і pName.

4) Тут ми вносимо зміни до нашого класу, додаючи новий метод із такою ж назвою SetTutorial. Тільки цього разу ми передаємо лише один параметр, яким є pName. У цьому методі ми просто встановлюємо для поля TutorialName значення pName.

Крок 2) Останній крок – змінити наш основний файл Program.cs. У нашій консольній програмі ми створимо об’єкт Guru99Навчальний клас.

Приклад поліморфізму C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public void SetTutorial(string pName) 
  {
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
   
   pTutor.SetTutorial(1,"First Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
   
   pTutor.SetTutorial("Second Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Пояснення:

  1. На першому кроці ми використовуємо метод SetTutorial із 2 параметрами. Де ми передаємо як TutorialID, так і TutorialName цьому методу.
  2. На другому кроці ми зараз викликаємо метод SetTutorial лише з одним параметром. Ми просто передаємо TutorialName цьому методу.

Якщо наведений вище код введено належним чином і програма запущена, буде показано наступний результат. Якщо у випадку, якщо ви хочете також отримати ідентифікатор підручника разом із назвою підручника, вам слід виконати наведений нижче крок

  1. Створіть окремий метод під назвою public int GetTutorialID
  2. У цьому методі напишіть рядок коду «повернути TutorialID». Це можна використати для повернення TutorialID програмі, що викликає.

вихід:

Приклад поліморфізму C#

З результату ми чітко бачимо, що обидва методи викликано успішно. Через це на консоль було надіслано рядки «First Tutorial» і «Second Tutorial».

Поширені запитання

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

Ні. Клас AC# успадковується лише від одного базового класу. Множинне успадкування використовує кілька інтерфейсів.

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

Ключове слово virtual робить базовий метод перевизначуваним; ключове слово override перевизначає його в похідному класі.

Ключове слово base дозволяє похідному класу викликати батьківський конструктор або звертатися до прихованих чи перевизначених базових членів.

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

Так. GitHub Copilot створює базові та дочірні класи та додає віртуальні методи та методи перевизначення з коментаря або назви класу.

ML.NET визначає класи даних та прогнозування, які успадковують спільні члени, а його конвеєр повторно використовує загальний базовий тип трансформатора.

Підсумуйте цей пост за допомогою: