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 в „Guru99Tutorial“, все още имаме достъп до това поле. Това е така, защото „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 от 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) Първата стъпка е същата като в предишните ни примери. Ние сме keeping дефиницията на метода 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#

От изхода можем ясно да видим, че и двата метода са извикани успешно. Поради това низовете „Първи урок“ и „Втори урок“ бяха изпратени до конзолата.

Въпроси и Отговори

C# поддържа единично, многостепенно и йерархично наследяване чрез класове. Множественото наследяване се осъществява само чрез интерфейси.

Не. Класът AC# наследява само от един базов клас. Множественото наследяване използва няколко интерфейса.

Претоварването използва едно име с различни параметри по време на компилация. Пренаписването предефинира виртуален базов метод по време на изпълнение.

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

Ключовата дума base позволява на производен клас да извика родителския конструктор или да достигне до скрити или презаписани базови членове.

Маркирай класа като запечатан. Запечатаният клас не може да бъде базов клас, което предотвратява по-нататъшно наследяване и подобрява производителността.

Да. GitHub Copilot изгражда базови и дъщерни класове и добавя виртуални и override методи от коментар или име на клас.

ML.NET дефинира класове за данни и прогнози, които наследяват споделени членове, а неговият конвейер използва повторно общ базов тип трансформатор.

Обобщете тази публикация с: