C# öröklődés és polimorfizmus programpéldákkal

⚡ Okos összefoglaló

A C#-ban az öröklődés és a polimorfizmus két alapvető objektumorientált elv. Az öröklődés lehetővé teszi, hogy egy gyermekosztály újra felhasználja a szülőosztály mezőit és metódusait, míg a polimorfizmus lehetővé teszi, hogy egy metódusnév többféle formát öltsön.

  • 🧬 Öröklés: Egy gyermekosztály örökli a szülő osztály mezőit és metódusait, és hozzáadhatja a sajátjait.
  • 🔒 Védett tagok: A szülőmezők védettként való megjelölése lehetővé teszi, hogy egy származtatott gyermekosztály közvetlenül újra felhasználja azokat.
  • 🧩 Polimorfizmus: Egy metódusnév sokféle alakot ölthet, így egyetlen hívás kontextustól függően másképp viselkedik.
  • 🔀 Módszer túlterhelés: Több metódus is közös néven fut, de paramétereikben különböznek, melyeket fordítási időben lehet feloldani.
  • 🧱 Code újrafelhasználás: Mindkét elv kiküszöböli a duplikált kódot, és konzisztens módon tartja a kapcsolódó osztályokat.
  • 🤖 AI segítség: A GitHub Copilot az alap és a származtatott osztályokat scaffollowolja; az ML.NET az osztályhierarchiákat modellbemenetként használja újra.

C# öröklődés és polimorfizmus

Mi az öröklődés a C#-ban?

Öröklés a C# fontos fogalma. Az öröklődés egy olyan fogalom, amelyben meghatározza a szülőosztályokat és a gyermekosztályokat. A gyermekosztályok a szülőosztály metódusait és tulajdonságait öröklik, ugyanakkor szükség esetén módosíthatják a metódusok viselkedését is. A gyermekosztály szükség esetén saját metódusokat is meghatározhat.

Ismerjük meg jobban a C# öröklődését egy programpélda segítségével:

C# öröklődési példa

Lássuk most, hogyan építhetjük be a kódunkba az öröklődés fogalmát.

Step 1) Az első lépés a Tutorial osztályunk kódjának megváltoztatása. Ebben a lépésben hozzáadjuk az alábbi kódot a Tutorial.cs fájlhoz.

C# öröklődési példa

Vegye figyelembe, hogy most hozzá kell adnunk a „protected” hozzáférés-módosítót mind a TutorialID, mind a TutorialName mezőhöz.

Ne feledd, hogy említettük ezt a hozzáférés-módosítót a Hozzáférésmódosító oktatóanyagNos, itt látható ennek a célja. Csak akkor tudja a gyermekosztály a szülőosztály mezőit használni, ha megvan ez a hozzáférés-módosító (védett).

Step 2) A második lépés az új gyermekosztályunk hozzáadása. Az osztály neve a következő lesz: „Guru99Tutorial”. Ebben a lépésben az alábbi kódot adjuk hozzá a Tutorial.cs fájlhoz. A kódot a Tutorial osztály definíciója után kell elhelyezni.

C# öröklődési példa

Code Magyarázat:-

  1. Az első lépés az, hogy létrehozzuk a Guru99Tutorial gyermekosztály. Azt is meg kell említenünk, hogy ez az osztály a Tutorial osztály gyermekosztálya lesz. Ezt a ':' kulcsszóval tehetjük meg.
  2. Ezután meghatározzuk a RenameTutorial nevű metódust. Ez a TutorialName mező átnevezésére szolgál. Ez a metódus elfogad egy karakterlánc-változót, amely tartalmazza az oktatóanyag új nevét.
  3. Ezután hozzárendeltük a pNewName paramétert a TutorialName mezőhöz. Megjegyzések: – Annak ellenére, hogy nem definiáltuk a TutorialName mezőt a „Guru99Tutorial” osztály esetén továbbra is hozzáférhetünk ehhez a mezőhöz. Ez annak a ténynek köszönhető, hogy „GuruA „99Tutorial” a Tutorial osztály gyermekosztálya. Mivel a Tutorial osztály mezőit védettként tettük elérhetővé, az osztály hozzáférhet hozzájuk.

Step 3) Az utolsó lépés a fő Program.cs fájlunk módosítása. A konzolalkalmazásunkban a következő objektumot fogjuk létrehozni: Guru99Tutorial osztály. Ezzel az objektummal meghívjuk a RenameTutorial metódust. Ezután a GetTutorial metódus segítségével megjelenítjük a TutorialName mezőt.

C# öröklődési példa

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 Magyarázat:-

  1. Az első lépés egy objektum létrehozása a Guru99Tutorial osztály. Ez a 'new' kulcsszóval tehető meg. Fontos megjegyezni, hogy ezúttal nem a Tutorial osztály egy objektumát hozzuk létre.
  2. A RenameTutorial metódust használjuk. Guru99Tutorial osztály a TutorialName mező módosításához. Átadjuk a „.Net by” karakterláncot. Guru99”-et a RenameTutorial metódushoz.
  3. Ezután meghívjuk a GetTutorial metódust. Megjegyzendő, hogy bár ez a metódus nincs definiálva a Guru99Tutorial osztály esetén továbbra is hozzáférhetünk ehhez a metódushoz. A GetTutorial metódus kimenete ezután a Console.WriteLine metóduson keresztül jelenik meg a konzolon.

Ha a fenti kódot megfelelően beírta és a program sikeresen lefut, a következő kimenet jelenik meg.

output:

C# öröklődési példa

A kimenetből jól látható, hogy a TutorialName mezőt átnevezték „.Net”-re a következő által: Guru99”. Ezt a gyermekosztály által meghívott RenameTutorial metódus tette lehetővé.

Mi a polimorfizmus a C#-ban?

polimorfizmus in C# egy OOPs koncepció, ahol egy névnek sokféle alakja lehet. Például van egy okostelefonod a kommunikációhoz. A választott kommunikációs mód bármi lehet. Lehet hívás, szöveges üzenet, képüzenet, e-mail stb. Tehát a cél közös, azaz a kommunikáció, de a megközelítésük eltérő. Ezt polimorfizmusnak nevezik.

Az alábbi példaprogram segítségével jobban megértheti a C# polimorfizmust:

Példa a C# polimorfizmusra

Lássuk most, hogyan építhetjük be kódunkba a polimorfizmus fogalmát.

Step 1) Az első lépés a Tutorial osztályunk kódjának megváltoztatása. Ebben a lépésben hozzáadjuk az alábbi kódot a Tutorial.cs fájlhoz.

Példa a C# polimorfizmusra

Code Magyarázat:-

1. és 2.) Az első lépés ugyanaz, mint a korábbi példáinkban. Tartjukping a SetTutorial metódus definíciója, ahogy van.

3) Ez a módszer beállítja a TutorialID és a TutorialName paramétereket a pID és pName paraméterek alapján.

4) Itt módosítjuk az osztályunkat, és hozzáadunk egy új metódust a SetTutorial névvel azonos néven. Csak ezúttal csak egy paramétert adunk át, ez a pName. Ebben a módszerben csak a TutorialName mezőt állítjuk be pName értékre.

Step 2) Az utolsó lépés a fő Program.cs fájlunk módosítása. A konzolalkalmazásunkban a következő objektumot fogjuk létrehozni: Guru99Oktatóanyag óra.

Példa a C# polimorfizmusra

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 Magyarázat:-

  1. Első lépésben a SetTutorial metódust használjuk 2 paraméterrel. Ahol a TutorialID-t és a TutorialName-et is átadjuk ennek a metódusnak.
  2. A második lépésben most a SetTutorial metódust hívjuk meg egyetlen paraméterrel. Csak a TutorialName-t adjuk át ennek a metódusnak.

Ha a fenti kódot helyesen adta meg és a program lefut, a következő kimenet jelenik meg. Ha az oktatóprogram azonosítóját is le szeretné kérni az oktatóanyag nevével együtt, kövesse az alábbi lépést

  1. Hozzon létre egy külön metódust public int GetTutorialID néven
  2. Ebben a módszerben írja be a „return TutorialID” kódsort. Ezzel visszaadható a TutorialID a hívó programnak.

output:

Példa a C# polimorfizmusra

A kimenetből jól látható, hogy mindkét metódust sikeresen meghívtuk. Emiatt a „First Tutorial” és a „Second Tutorial” karakterláncok elküldésre kerültek a konzolra.

GYIK

A C# támogatja az egyszintű, többszintű és hierarchikus öröklődést osztályokon keresztül. A többszörös öröklődés csak interfészeken keresztül lehetséges.

Nem. Az AC# osztály csak egy alaposztálytól örököl. A többszörös öröklődés ehelyett több interfészt használ.

A túlterhelés egy nevet használ különböző paraméterekkel fordítási időben. A felülbírálás futási időben újradefiniálja a virtuális alapmetódust.

A virtual kulcsszó felülírhatóvá teszi az alapmetódust; az override kulcsszó újradefiniálja azt egy származtatott osztályban.

A base kulcsszó lehetővé teszi egy származtatott osztály számára, hogy meghívja a szülő konstruktort, vagy elérje a rejtett vagy felülírt alaptagokat.

Jelöld meg az osztályt lezártként. Egy lezárt osztály nem lehet alaposztály, ami megakadályozza a további öröklődést és javítja a teljesítményt.

Igen. A GitHub Copilot alap- és gyermekosztályokat állít össze, valamint virtuális és felülíró metódusokat ad hozzá egy megjegyzésből vagy osztálynévből.

Az ML.NET olyan adat- és predikciós osztályokat definiál, amelyek megosztott tagokat örökölnek, és a folyamata egy közös transzformátor alaptípust használ újra.

Foglald össze ezt a bejegyzést a következőképpen: