C# Overerving en polymorfisme met programmavoorbeelden

โšก Slimme samenvatting

Overerving en polymorfisme in C# zijn twee kernprincipes van objectgeoriรซnteerd programmeren. Overerving stelt een afgeleide klasse in staat de velden en methoden van een bovenliggende klasse te hergebruiken, terwijl polymorfisme ervoor zorgt dat รฉรฉn methodenaam vele vormen kan aannemen.

  • ๐Ÿงฌ Erfenis: Een afgeleide klasse erft de velden en methoden van de bovenliggende klasse en kan er eigen velden en methoden aan toevoegen.
  • ๐Ÿ”’ Beschermde leden: Door velden van de ouderklasse als beveiligd te markeren, kan een afgeleide subklasse deze velden direct hergebruiken.
  • ๐Ÿงฉ Polymorfisme: Eรฉn methodenaam kan vele vormen aannemen, waardoor een enkele aanroep zich in verschillende contexten gedraagt.
  • ๐Ÿ”€ Methode-overloading: Verschillende methoden delen รฉรฉn naam, maar verschillen in parameters, die tijdens het compileren worden bepaald.
  • ๐Ÿงฑ Code hergebruik: Beide principes voorkomen dubbele code en zorgen ervoor dat gerelateerde klassen consistent blijven.
  • ๐Ÿค– AI-assistentie: GitHub Copilot genereert basis- en afgeleide klassen; ML.NET hergebruikt klassehiรซrarchieรซn als modelinvoer.

Overerving en polymorfisme in C#

Wat is overerving in C#?

Erfenis is een belangrijk concept van C#. Overerving is een concept waarin u bovenliggende klassen en onderliggende klassen definieert. De onderliggende klassen nemen methoden en eigenschappen over van de bovenliggende klasse, maar kunnen tegelijkertijd indien nodig ook het gedrag van de methoden wijzigen. De onderliggende klasse kan indien nodig ook eigen methoden definiรซren.

Laten we C# Inheritance beter begrijpen aan de hand van een programmavoorbeeld:

C#-overervingsvoorbeeld

Laten we nu kijken hoe we het concept van overerving in onze code kunnen opnemen.

Stap 1) De eerste stap is het wijzigen van de code voor onze Tutorial-klasse. In deze stap voegen we de onderstaande code toe aan het bestand Tutorial.cs.

C#-overervingsvoorbeeld

Merk op dat we nu de toegangsmodifier 'protected' moeten toevoegen aan zowel het TutorialID- als het TutorialName-veld.

We hadden deze toegangsmodifier al eerder genoemd. Handleiding voor toegangsaanpassingenHieruit blijkt het nut hiervan. Alleen wanneer de toegangsaanpasser (protected) is ingesteld, kan de afgeleide klasse de velden van de bovenliggende klasse gebruiken.

Stap 2) De tweede stap is het toevoegen van onze nieuwe subgroep. De naam van deze groep zal zijn:Guru99Tutorialโ€. In deze stap voegen we de onderstaande code toe aan het bestand Tutorial.cs. De code moet na de definitie van de klasse Tutorial worden geplaatst.

C#-overervingsvoorbeeld

Code Uitleg:-

  1. De eerste stap is het creรซren van de Guru99Tutorial is een subklasse van de klasse Tutorial. We moeten ook vermelden dat deze klasse een subklasse is van de klasse Tutorial. Dit wordt aangegeven met het sleutelwoord ':'.
  2. Vervolgens definiรซren we een methode genaamd RenameTutorial. Het wordt gebruikt om de naam van het veld TutorialName te wijzigen. Deze methode accepteert een stringvariabele die de nieuwe naam van de Tutorial bevat.
  3. Vervolgens hebben we de parameter pNewName toegewezen aan het veld TutorialName. Note: โ€“ Hoewel we het veld TutorialName niet hebben gedefinieerd in de โ€œGuruIn de "99Tutorial"-les hebben we nog steeds toegang tot dit veld. Dit komt doordat "Guru"Tutorial" is een subklasse van de klasse Tutorial. Omdat we de velden van de klasse Tutorial als protected hebben ingesteld, zijn ze toegankelijk voor deze klasse.

Stap 3) De laatste stap is het aanpassen van ons hoofdprogramma.cs-bestand. In onze consoletoepassing gaan we een object maken van de Guru99Tutorial-klasse. Met dit object gaan we de RenameTutorial-methode aanroepen. Vervolgens gaan we het veld TutorialName weergeven met behulp van de GetTutorial-methode.

C#-overervingsvoorbeeld

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

  1. De eerste stap is het creรซren van een object voor de Guru99Tutorial-klasse. Dit doen we met het sleutelwoord 'new'. Merk op dat we deze keer geen object van de Tutorial-klasse maken.
  2. We gebruiken de RenameTutorial-methode van de Guru99Tutorial-klasse om het veld TutorialName te wijzigen. We geven de tekenreeks โ€œ.Net by Guru99โ€ naar de RenameTutorial-methode.
  3. Vervolgens roepen we de GetTutorial-methode aan. Merk op dat, hoewel deze methode niet is gedefinieerd in de GuruIn de 99Tutorial-klasse hebben we nog steeds toegang tot deze methode. De uitvoer van de GetTutorial-methode wordt vervolgens via de Console.WriteLine-methode naar de console weergegeven.

Als de bovenstaande code correct is ingevoerd en het programma succesvol is uitgevoerd, wordt de volgende uitvoer weergegeven.

Output:

C#-overervingsvoorbeeld

Uit de uitvoer kunnen we duidelijk zien dat het veld TutorialName is hernoemd naar โ€œ.Net door Guru99โ€. Dit werd mogelijk gemaakt door de RenameTutorial-methode die door de subklasse werd aangeroepen.

Wat is polymorfisme in C#?

polymorfisme in C# Polymorfisme is een concept uit objectgeoriรซnteerd programmeren (OOP) waarbij รฉรฉn naam vele vormen kan aannemen. Neem bijvoorbeeld een smartphone voor communicatie. De communicatiemodus die je kiest, kan van alles zijn: een telefoongesprek, een sms, een fotobericht, een e-mail, enzovoort. Het doel is dus hetzelfde, namelijk communicatie, maar de aanpak verschilt. Dit noemen we polymorfisme.

U krijgt een beter begrip van C# Polymorphism door het onderstaande programmavoorbeeld:

C# Polymorfisme-voorbeeld

Laten we nu eens kijken hoe we het concept van polymorfisme in onze code kunnen opnemen.

Stap 1) De eerste stap is het wijzigen van de code voor onze Tutorial-klasse. In deze stap voegen we de onderstaande code toe aan het bestand Tutorial.cs.

C# Polymorfisme-voorbeeld

Code Uitleg:-

1 & 2) De eerste stap is hetzelfde als in onze eerdere voorbeelden. We houden...ping de definitie van de SetTutorial-methode zoals die is.

3) Deze methode stelt de TutorialID en de TutorialName in op basis van de parameters pID en pName.

4) Dit is waar we een wijziging aanbrengen in onze klasse, waarbij we een nieuwe methode toevoegen met dezelfde naam SetTutorial. Alleen deze keer geven we slechts รฉรฉn parameter door, namelijk de pName. Bij deze methode stellen we alleen het veld TutorialName in op pName.

Stap 2) De laatste stap is het aanpassen van ons hoofdprogramma.cs-bestand. In onze consoletoepassing gaan we een object maken van de Guru99Tutorial-les.

C# Polymorfisme-voorbeeld

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

  1. In de eerste stap gebruiken we de SetTutorial-methode met 2 parameters. Waar we zowel de TutorialID als de TutorialName doorgeven aan deze methode.
  2. In de tweede stap roepen we nu de SetTutorial-methode aan met slechts รฉรฉn parameter. We geven alleen de TutorialName door aan deze methode.

Als de bovenstaande code correct is ingevoerd en het programma wordt uitgevoerd, wordt de volgende uitvoer weergegeven. Als u ook de Tutorial ID samen met de Tutorial Name wilt ophalen, moet u de onderstaande stap volgen

  1. Maak een afzonderlijke methode met de naam public int GetTutorialID
  2. Schrijf in die methode de coderegel 'return TutorialID'. Dit kan worden gebruikt om de TutorialID terug te sturen naar het aanroepende programma.

Output:

C# Polymorfisme-voorbeeld

Uit de uitvoer kunnen we duidelijk zien dat beide methoden met succes zijn aangeroepen. Hierdoor werden de strings โ€œFirst Tutorialโ€ en โ€œSecond Tutorialโ€ naar de console gestuurd.

Veelgestelde vragen

C# ondersteunt enkelvoudige, meervoudige en hiรซrarchische overerving via klassen. Meervoudige overerving is alleen mogelijk via interfaces.

Nee. De AC# klasse erft slechts van รฉรฉn basisklasse. Meervoudige overerving maakt gebruik van meerdere interfaces.

Overloading gebruikt รฉรฉn naam met verschillende parameters tijdens het compileren. Overriding herdefinieert een virtuele basismethode tijdens de uitvoering.

Het sleutelwoord `virtual` maakt een basismethode overschrijfbaar; het sleutelwoord `override` herdefinieert deze in een afgeleide klasse.

Het sleutelwoord `base` stelt een afgeleide klasse in staat om de constructor van de ouderklasse aan te roepen of toegang te krijgen tot verborgen of overschreven leden van de basisklasse.

Markeer de klasse als verzegeld. Een verzegelde klasse kan geen basisklasse zijn, waardoor verdere overerving wordt voorkomen en de prestaties verbeteren.

Ja. GitHub Copilot genereert basis- en afgeleide klassen en voegt virtuele en overschrijfbare methoden toe op basis van een commentaar of klassenaam.

ML.NET definieert data- en voorspellingsklassen die gedeelde leden overerven, en de pipeline hergebruikt een gemeenschappelijk basistype voor transformatoren.

Vat dit bericht samen met: