C# Dědičnost a polymorfismus s příklady programů
Co je dědičnost v C#?
Dědictví je důležitým konceptem C#. Dědičnost je koncept, ve kterém definujete nadřazené třídy a podřízené třídy. Podřízené třídy dědí metody a vlastnosti nadřazené třídy, ale zároveň mohou v případě potřeby upravit chování metod. Podřízená třída může v případě potřeby také definovat vlastní metody.
Pojďme lépe porozumět dědičnosti C# na příkladu programu:
Příklad dědičnosti C#
Podívejme se nyní, jak můžeme začlenit koncept dědičnosti do našeho kódu.
Krok 1) Prvním krokem je změna kódu pro naši třídu Tutorial. V tomto kroku přidáme níže uvedený kód do souboru Tutorial.cs.
Všimněte si, že nyní musíme přidat modifikátor přístupu 'protected' do pole TutorialID i TutorialName.
Nezapomeňte, že jsme se o tomto modifikátoru přístupu zmínili v tutoriálu Modifikátor přístupu. Tady vidíte účel toho mít. Pouze když máte tento modifikátor přístupu (chráněný), může podřízená třída používat pole nadřazené třídy.
Krok 2) Druhým krokem je přidání naší nové dětské třídy. Název této třídy bude „Guru99Tutorial“. V tomto kroku přidáme níže uvedený kód do souboru Tutorial.cs. Kód by měl být umístěn za definicí třídy Tutorial.
Vysvětlení kódu:-
- Prvním krokem je vytvoření dětské třídy Guru99Tutorial. Musíme také zmínit, že tato třída bude dětskou třídou třídy Tutorial. To se provádí pomocí klíčového slova ':'.
- Dále definujeme metodu nazvanou RenameTutorial. Bude použit k přejmenování pole TutorialName. Tato metoda přijímá řetězcovou proměnnou, která obsahuje nový název kurzu.
- Poté jsme přiřadili parametr pNewName do pole TutorialName.
Hodnocení: – I když jsme nedefinovali pole TutorialName ve třídě „Guru99Tutorial“, stále máme k tomuto poli přístup. Důvodem je skutečnost, že „Guru99Tutorial“ je podřízená třída třídy Tutorial. A protože jsme vytvořili pole třídy Tutorial jako chráněná, může k nim tato třída přistupovat.
Krok 3) Posledním krokem je úprava našeho hlavního souboru Program.cs. V naší konzolové aplikaci vytvoříme objekt třídy Guru99Tutorial. S tímto objektem zavoláme metodu RenameTutorial. Poté pomocí metody GetTutorial zobrazíme pole TutorialName.
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(); } } }
Vysvětlení kódu:-
- Prvním krokem je vytvoření objektu pro třídu Guru99Tutorial. To se provádí pomocí klíčového slova 'new'. Všimněte si, že tentokrát nevytváříme objekt třídy Tutorial.
- Ke změně pole TutorialName používáme metodu RenameTutorial třídy Guru99Tutorial. Řetězec „.Net by Guru99“ předáme metodě RenameTutorial.
- Poté zavoláme metodu GetTutorial. Všimněte si, že i když tato metoda není definována ve třídě Guru99Tutorial, stále máme k této metodě přístup. Výstup metody GetTutorial se pak zobrazí konzoli pomocí metody Console.WriteLine.
Pokud je výše uvedený kód zadán správně a program je úspěšně proveden, zobrazí se následující výstup.
Výstup:
Z výstupu jasně vidíme, že pole TutorialName bylo přejmenováno na „.Net by Guru99“. To umožnila metoda RenameTutorial volaná podřízenou třídou.
Co je polymorfismus v C#?
Polymorfismus v C# je koncept OOPs, kde jedno jméno může mít mnoho podob. Například máte smartphone pro komunikaci. Komunikační režim, který zvolíte, může být jakýkoli. Může to být hovor, SMS, obrázková zpráva, mail atd. Cíl je tedy společný, tedy komunikace, ale jejich přístup je jiný. Toto se nazývá polymorfismus.
Pomocí níže uvedeného příkladu programu získáte lepší porozumění polymorfismu C#:
Příklad polymorfismu C#
Podívejme se nyní, jak můžeme začlenit koncept polymorfismu do našeho kódu.
Krok 1) Prvním krokem je změna kódu pro naši třídu Tutorial. V tomto kroku přidáme níže uvedený kód do souboru Tutorial.cs.
Vysvětlení kódu:-
1 & 2) První krok je stejný jako v našich předchozích příkladech. Definici metody SetTutorial zachováváme tak, jak je.
3) Tato metoda nastaví TutorialID a TutorialName na základě parametrů pID a pName.
4) Zde provedeme změnu v naší třídě, kde přidáme novou metodu se stejným názvem SetTutorial. Pouze tentokrát předáváme pouze jeden parametr, kterým je pName. V této metodě pouze nastavujeme pole TutorialName na pName.
Krok 2) Posledním krokem je úprava našeho hlavního souboru Program.cs. V naší konzolové aplikaci vytvoříme objekt třídy Guru99Tutorial.
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(); } } }
Vysvětlení kódu:-
- V prvním kroku používáme metodu SetTutorial se 2 parametry. Kde této metodě předáváme jak TutorialID, tak TutorialName.
- Ve druhém kroku nyní voláme metodu SetTutorial pouze s jedním parametrem. Této metodě právě předáváme TutorialName.
Pokud je výše uvedený kód zadán správně a program je spuštěn, zobrazí se následující výstup. Pokud v případě, že byste chtěli získat také ID výukového programu spolu s názvem výukového programu, měli byste postupovat podle níže uvedeného kroku
- Vytvořte samostatnou metodu nazvanou public int GetTutorialID
- V této metodě napište řádek kódu „return TutorialID“. To lze použít k vrácení TutorialID volajícímu programu.
Výstup:
Z výstupu jasně vidíme, že obě metody byly volány úspěšně. Z tohoto důvodu byly do konzole odeslány řetězce „First Tutorial“ a „Second Tutorial“.
Shrnutí
- Dědičnost je místo, kde podřízená třída zdědí pole a metody nadřazené třídy. Podřízená třída pak může také definovat své vlastní metody.
- Polymorfismus v C# je koncept OOPs, kde jedno jméno může mít mnoho podob.