C# nasljeđivanje i polimorfizam s primjerima programa

⚡ Pametni sažetak

Nasljeđivanje i polimorfizam u C# su dva osnovna objektno orijentirana principa. Nasljeđivanje omogućuje podređenoj klasi ponovnu upotrebu polja i metoda roditeljske klase, dok polimorfizam omogućuje da jedno ime metode poprimi mnogo oblika.

  • 🧬 nasljedstvo: Podređena klasa nasljeđuje polja i metode svoje roditeljske klase i može dodati vlastite.
  • 🔒 Zaštićeni članovi: Označavanje roditeljskih polja zaštićenim omogućuje izvedenoj podređenoj klasi da ih izravno ponovno koristi.
  • 🧩 polimorfizam: Jedno ime metode može imati mnogo oblika, pa se jedan poziv ponaša različito ovisno o kontekstu.
  • 🔀 Preopterećenje metode: Nekoliko metoda dijeli isto ime, ali se razlikuju u parametrima, što se rješava tijekom kompajliranja.
  • 🧱 Code ponovna upotreba: Oba principa uklanjaju duplicirani kod i održavaju konzistentnost povezanih klasa.
  • 🤖 AI pomoć: GitHub Copilot scaffolira osnovne i izvedene klase; ML.NET ponovno koristi hijerarhije klasa kao ulaz modela.

Nasljeđivanje i polimorfizam u C#

Što je nasljeđivanje u C#?

Nasljeđivanje je važan koncept C#. Nasljeđivanje je koncept u kojem definirate roditeljske klase i podređene klase. Podređene klase nasljeđuju metode i svojstva nadređene klase, ali u isto vrijeme mogu i modificirati ponašanje metoda ako je potrebno. Klasa dijete također može definirati vlastite metode ako je potrebno.

Hajdemo bolje razumjeti C# nasljeđivanje pomoću primjera programa:

Primjer nasljeđivanja C#

Pogledajmo sada kako možemo ugraditi koncept nasljeđivanja u naš kod.

Korak 1) Prvi korak je promjena koda za našu klasu Tutorial. U ovom koraku dodajemo donji kod u datoteku Tutorial.cs.

Primjer nasljeđivanja C#

Imajte na umu da sada moramo dodati modifikator pristupa 'protected' u polje TutorialID i TutorialName.

Sjetite se da smo spomenuli ovaj modifikator pristupa u Vodič za modifikator pristupaPa, ovdje možete vidjeti svrhu ovoga. Samo kada imate ovaj modifikator pristupa (zaštićen), podređena klasa može koristiti polja roditeljske klase.

Korak 2) Drugi korak je dodavanje naše nove podređene klase. Naziv ove klase bit će „Guru99Tutorial”. U ovom koraku dodajemo donji kod u datoteku Tutorial.cs. Kod treba smjestiti nakon definicije klase Tutorial.

Primjer nasljeđivanja C#

Code Obrazloženje:-

  1. Prvi korak je stvaranje Guru99Podređena klasa Tutorial. Također moramo spomenuti da će ova klasa biti podređena klasa Tutorial. To se postiže ključnom riječi ':'.
  2. Zatim definiramo metodu koja se zove RenameTutorial. Koristit će se za preimenovanje polja TutorialName. Ova metoda prihvaća varijablu niza koja sadrži novi naziv vodiča.
  3. Zatim smo dodijelili parametar pNewName polju TutorialName. bilješke: – Iako nismo definirali polje TutorialName u "Guru99Tutorial” razred, još uvijek možemo pristupiti ovom polju. To je zbog činjenice da “Guru„99Tutorial“ je podređena klasa klase Tutorial. A budući da smo polja klase Tutorial učinili zaštićenima, ova klasa im može pristupiti.

Korak 3) Posljednji korak je izmjena naše glavne datoteke Program.cs. U našoj konzolnoj aplikaciji napravit ćemo objekt GuruKlasa 99Tutorial. S ovim objektom pozvat ćemo metodu RenameTutorial. Zatim ćemo prikazati polje TutorialName uz pomoć metode GetTutorial.

Primjer nasljeđivanja 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 Obrazloženje:-

  1. Prvi korak je stvaranje objekta za GuruKlasa 99Tutorial. To se radi putem ključne riječi 'new'. Imajte na umu da ovaj put ne stvaramo objekt klase Tutorial.
  2. Koristimo metodu RenameTutorial od Guru99Tutorial klasa za promjenu polja TutorialName. Prosljeđujemo niz ".Net by Guru99” metodi RenameTutorial.
  3. Zatim pozivamo metodu GetTutorial. Imajte na umu da iako ova metoda nije definirana u GuruU klasi 99Tutorial, još uvijek možemo pristupiti ovoj metodi. Izlaz metode GetTutorial zatim se prikazuje u konzoli putem metode Console.WriteLine.

Ako se gornji kod ispravno unese i program se uspješno izvede, prikazat će se sljedeći izlaz.

Izlaz:

Primjer nasljeđivanja C#

Iz izlaza jasno možemo vidjeti da je polje TutorialName preimenovano u „.Net od strane Guru99”. To je omogućeno metodom RenameTutorial koju je pozvala podređena klasa.

Što je polimorfizam u C#?

polimorfizam in C# je OOP koncept gdje jedno ime može imati mnogo oblika. Na primjer, imate pametni telefon za komunikaciju. Način komunikacije koji odaberete može biti bilo što. To može biti poziv, tekstualna poruka, slikovna poruka, pošta itd. Dakle, cilj je zajednički, odnosno komunikacija, ali njihov pristup je drugačiji. To se naziva polimorfizam.

Dobit ćete bolje razumijevanje C# polimorfizma pomoću donjeg primjera programa:

Primjer C# polimorfizma

Pogledajmo sada kako možemo ugraditi koncept polimorfizma u naš kod.

Korak 1) Prvi korak je promjena koda za našu klasu Tutorial. U ovom koraku dodajemo donji kod u datoteku Tutorial.cs.

Primjer C# polimorfizma

Code Obrazloženje:-

1 i 2) Prvi korak je isti kao u našim ranijim primjerima. Zadržavamoping definicija metode SetTutorial kakva jest.

3) Ova metoda postavlja TutorialID i TutorialName na temelju parametara pID i pName.

4) Ovo je mjesto gdje vršimo promjenu u našoj klasi pri čemu dodajemo novu metodu s istim imenom SetTutorial. Samo ovaj put prosljeđujemo samo jedan parametar koji je pName. U ovoj metodi samo postavljamo polje TutorialName na pName.

Korak 2) Posljednji korak je izmjena naše glavne datoteke Program.cs. U našoj konzolnoj aplikaciji napravit ćemo objekt Guru99Tutorijal.

Primjer C# polimorfizma

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 Obrazloženje:-

  1. U prvom koraku koristimo metodu SetTutorial s 2 parametra. Gdje ovoj metodi prosljeđujemo i TutorialID i TutorialName.
  2. U drugom koraku sada pozivamo metodu SetTutorial sa samo jednim parametrom. Ovoj metodi samo prosljeđujemo TutorialName.

Ako se gornji kod ispravno unese i program se pokrene, prikazat će se sljedeći izlaz. Ako u slučaju da želite također dohvatiti ID vodiča zajedno s nazivom vodiča, trebali biste slijediti korak u nastavku

  1. Stvorite zasebnu metodu pod nazivom public int GetTutorialID
  2. U toj metodi napišite redak koda "vrati TutorialID." Ovo se može koristiti za vraćanje TutorialID-a pozivajućem programu.

Izlaz:

Primjer C# polimorfizma

Iz izlaza možemo jasno vidjeti da su obje metode uspješno pozvane. Zbog toga su nizovi "First Tutorial" i "Second Tutorial" poslani na konzolu.

Pitanja i odgovori

C# podržava jednostruko, višerazinsko i hijerarhijsko nasljeđivanje putem klasa. Višestruko nasljeđivanje dolazi samo putem sučelja.

Ne. Klasa AC# nasljeđuje samo jednu bazu klase. Višestruko nasljeđivanje umjesto toga koristi nekoliko sučelja.

Preopterećenje koristi jedno ime s različitim parametrima tijekom kompajliranja. Nadjačavanje redefinira virtualnu osnovnu metodu tijekom izvođenja.

Ključna riječ virtual omogućuje prepisivanje osnovne metode; ključna riječ override redefinira je u izvedenoj klasi.

Ključna riječ base omogućuje izvedenoj klasi pozivanje roditeljskog konstruktora ili dosezanje skrivenih ili nadjačanih osnovnih članova.

Označi klasu kao zapečaćenu. Zapečaćena klasa ne može biti osnovna klasa, što sprječava daljnje nasljeđivanje i poboljšava performanse.

Da. GitHub Copilot scaffolira osnovne i podređene klase te dodaje virtualne i nadjačavajuće metode iz komentara ili naziva klase.

ML.NET definira klase podataka i predviđanja koje nasljeđuju zajedničke članove, a njegov cjevovod ponovno koristi zajednički osnovni tip transformatora.

Sažmite ovu objavu uz: