C#:n perinnöllisyys ja polymorfismi ohjelmaesimerkeillä

⚡ Älykäs yhteenveto

Periytyminen ja polymorfismi ovat C#:n kaksi keskeistä olio-ohjelmoinnin periaatetta. Periytyminen antaa lapsiluokan käyttää uudelleen pääluokan kenttiä ja metodeja, kun taas polymorfismi antaa yhden metodin nimen olla monessa eri muodossa.

  • 🧬 Perintö: Lapsiluokka perii pääluokkansa kentät ja metodit ja voi lisätä omia.
  • 🔒 Suojatut jäsenet: Yläluokan kenttien merkitseminen suojatuiksi antaa johdetulle aliluokalle mahdollisuuden käyttää niitä suoraan uudelleen.
  • 🧩 Polymorfismi: Yhdellä metodin nimellä on monia muotoja, joten yksittäinen kutsu käyttäytyy eri tavalla kontekstin mukaan.
  • 🔀 Menetelmän ylikuormitus: Useilla metodeilla on sama nimi, mutta ne eroavat toisistaan ​​parametrien osalta, jotka ratkaistaan ​​käännösaikana.
  • 🧱 Code uudelleenkäyttö: Molemmat periaatteet poistavat päällekkäistä koodia ja pitävät toisiinsa liittyvät luokat yhtenäisinä.
  • 🤖 AI-apu: GitHub Copilot luokittelee perus- ja johdettuja luokkia; ML.NET käyttää luokkahierarkioita uudelleen mallin syötteenä.

C#:n periytyminen ja polymorfismi

Mitä on perinnöllisyys C#:ssa?

Perintö on tärkeä C#:n käsite. Perinnöllisyys on käsite, jossa määrittelet vanhempi- ja alaluokat. Lapiluokat perivät emoluokan metodit ja ominaisuudet, mutta samalla ne voivat tarvittaessa myös muokata menetelmien käyttäytymistä. Lapsiluokka voi myös tarvittaessa määritellä omia menetelmiään.

Ymmärrämme paremmin C#-perinnön ohjelmaesimerkin avulla:

Esimerkki C#:n perinnöstä

Katsotaan nyt, kuinka voimme sisällyttää perinnön käsitteen koodiimme.

Vaihe 1) Ensimmäinen askel on vaihtaa Tutorial-luokkamme koodi. Tässä vaiheessa lisäämme alla olevan koodin Tutorial.cs-tiedostoon.

Esimerkki C#:n perinnöstä

Huomaa, että meidän on nyt lisättävä "suojattu" käyttöoikeusmuunnin sekä TutorialID- että TutorialName-kenttään.

Muista, että mainitsimme tämän käyttöoikeusmuokkaimen kohdassa Käyttöoikeusmuokkaimen opetusohjelmaNo tässä näkyy tämän tarkoitus. Vain kun sinulla on tämä käyttöoikeusmuokkaaja (suojattu), lapsiluokka voi käyttää pääluokan kenttiä.

Vaihe 2) Toinen vaihe on uuden lapsiluokan lisääminen. Tämän luokan nimi on "Guru99Tutorial”. Tässä vaiheessa lisätään alla oleva koodi Tutorial.cs-tiedostoon. Koodi tulisi sijoittaa Tutorial-luokan määritelmän jälkeen.

Esimerkki C#:n perinnöstä

Code Selitys:-

  1. Ensimmäinen askel on luoda Guru99Tutorial-luokan lapsiluokka. On myös mainittava, että tämä luokka tulee olemaan Tutorial-luokan lapsiluokka. Tämä tehdään avainsanalla ':'.
  2. Seuraavaksi määrittelemme menetelmän nimeltä RenameTutorial. Sitä käytetään TutorialName-kentän nimeämiseen uudelleen. Tämä menetelmä hyväksyy merkkijonomuuttujan, joka sisältää opetusohjelman uuden nimen.
  3. Määritimme sitten TutorialName-kenttään parametrin pNewName. Huomautuksia: – Vaikka emme ole määritelleet TutorialName-kenttää kohdassa ”Guru99Tutorial”-luokan avulla voimme edelleen käyttää tätä kenttää. Tämä johtuu siitä, että ”Guru”99Tutorial” on Tutorial-luokan lapsiluokka. Ja koska teimme Tutorial-luokan kentät suojatuiksi, tämä luokka voi käyttää niitä.

Vaihe 3) Viimeinen vaihe on muokata päätiedostoamme Program.cs. Konsolisovelluksessamme teemme siitä objektin Guru99Tutorial-luokka. Tällä objektilla kutsumme RenameTutorial-metodia. Tämän jälkeen näytämme TutorialName-kentän GetTutorial-metodin avulla.

Esimerkki C#:n perinnöstä

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 Selitys:-

  1. Ensimmäinen vaihe on luoda objekti, jota varten Guru99Tutorial-luokka. Tämä tehdään avainsanalla 'new'. Huomaa, että tällä kertaa emme luo Tutorial-luokan oliota.
  2. Käytämme RenameTutorial-metodia Guru99Tutorial-luokka TutorialName-kentän muuttamiseen. Välitämme merkkijonon “.Net by Guru99” RenameTutorial-metodiin.
  3. Kutsumme sitten GetTutorial-metodia. Huomaa, että vaikka tätä metodia ei ole määritelty Guru99Tutorial-luokan avulla voimme edelleen käyttää tätä metodia. GetTutorial-metodin tuloste näytetään sitten konsolille Console.WriteLine-metodin kautta.

Jos yllä oleva koodi on syötetty oikein ja ohjelma suoritetaan onnistuneesti, seuraava tulos näytetään.

lähtö:

Esimerkki C#:n perinnöstä

Tulosteesta näemme selvästi, että TutorialName-kentän nimi muutettiin muotoon ".Net by Guru99”. Tämän mahdollisti lapsiluokan kutsuma RenameTutorial-metodi.

Mikä on polymorfismi C#:ssa?

polymorfismi in C# on OOP-käsite, jossa yhdellä nimellä voi olla useita muotoja. Esimerkiksi sinulla on älypuhelin viestintää varten. Valitsemasi viestintätapa voi olla mikä tahansa. Se voi olla puhelu, tekstiviesti, kuvaviesti, sähköposti jne. Tavoite on siis yhteinen, eli viestintä, mutta lähestymistapa on erilainen. Tätä kutsutaan polymorfismiksi.

Saat paremman käsityksen C#-polymorfismista alla olevan ohjelmaesimerkin avulla:

Esimerkki C#:n polymorfismista

Katsotaan nyt, kuinka voimme sisällyttää polymorfismin käsitteen koodiimme.

Vaihe 1) Ensimmäinen askel on vaihtaa Tutorial-luokkamme koodi. Tässä vaiheessa lisäämme alla olevan koodin Tutorial.cs-tiedostoon.

Esimerkki C#:n polymorfismista

Code Selitys:-

1 ja 2) Ensimmäinen vaihe on sama kuin aiemmissa esimerkeissämme. Pidämmeping SetTutorial-metodin määritelmä sellaisenaan.

3) Tämä menetelmä asettaa TutorialID:n ja TutorialName:n parametrien pID ja pName perusteella.

4) Tässä teemme muutoksen luokkaamme, jossa lisäämme uuden menetelmän samalla nimellä SetTutorial. Vain tällä kertaa välitämme vain yhden parametrin, joka on pName. Tässä menetelmässä asetamme vain TutorialName-kentän arvoksi pName.

Vaihe 2) Viimeinen vaihe on muokata päätiedostoamme Program.cs. Konsolisovelluksessamme teemme siitä objektin Guru99Tutorial-luokka.

Esimerkki C#:n polymorfismista

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 Selitys:-

  1. Ensimmäisessä vaiheessa käytämme SetTutorial-menetelmää kahdella parametrilla. Jos välitämme sekä TutorialID- että TutorialName-tunnisteen tälle menetelmälle.
  2. Toisessa vaiheessa kutsumme nyt SetTutorial-menetelmää vain yhdellä parametrilla. Välitämme vain TutorialNamen tälle menetelmälle.

Jos yllä oleva koodi on syötetty oikein ja ohjelma ajetaan, näyttöön tulee seuraava tulos. Jos haluat hakea myös opetusohjelman tunnuksen yhdessä opetusohjelman nimen kanssa, noudata alla olevaa vaihetta

  1. Luo erillinen menetelmä nimeltä public int GetTutorialID
  2. Kirjoita tässä menetelmässä koodirivi "return TutorialID". Tätä voidaan käyttää palauttamaan TutorialID kutsuvaan ohjelmaan.

lähtö:

Esimerkki C#:n polymorfismista

Tulosteesta voimme selvästi nähdä, että molemmat menetelmät kutsuttiin onnistuneesti. Tämän vuoksi merkkijonot "First Tutorial" ja "Second Tutorial" lähetettiin konsoliin.

UKK

C# tukee yksi-, monitaso- ja hierarkkista periytymistä luokkien kautta. Moninkertainen periytyminen tapahtuu vain rajapintojen kautta.

Ei. AC#-luokka periytyy vain yhdestä kantaluokasta. Moninkertainen periytyminen käyttää sen sijaan useita rajapintoja.

Ylikuormitus käyttää yhtä nimeä ja eri parametreja käännösaikana. Ohittaminen määrittelee virtuaalisen perusmetodin uudelleen suorituksen aikana.

Avainsana virtual tekee perusmetodista ylikirjoitettavan; avainsana override määrittelee sen uudelleen johdetussa luokassa.

Avainsana base antaa johdetulle luokalle mahdollisuuden kutsua pääluokan konstruktoria tai päästä käsiksi piilotettuihin tai ohitettuihin perusjäseniin.

Merkitse luokka suljetuksi. Suljettu luokka ei voi olla perusluokka, mikä estää periytymisen ja parantaa suorituskykyä.

Kyllä. GitHub Copilot luo tukirakenteita perus- ja lapsiluokille ja lisää virtuaalisia ja ohitusmetodeja kommentin tai luokan nimen perusteella.

ML.NET määrittelee data- ja ennustusluokat, jotka perivät jaetut jäsenet, ja sen putki käyttää uudelleen yhteistä muuntajaperustyyppiä.

Tiivistä tämä viesti seuraavasti: