C# Overerving en polymorfisme met programmavoorbeelden

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.

Onthoud dat we deze toegangsmodifier hadden genoemd in de Access Modifier-tutorial. Welnu, hier kun je zien wat het doel hiervan is. Alleen als u deze toegangsmodificator (beveiligd) hebt, kan de onderliggende klasse de velden van de bovenliggende klasse gebruiken.

Stap 2) De tweede stap is het toevoegen van onze nieuwe kinderklasse. De naam van deze klasse zal “Guru99Tutorial” zijn. In deze stap voegen we de onderstaande code toe aan het bestand Tutorial.cs. De code moet na de Tutorial-klassedefinitie worden geplaatst.

C#-overervingsvoorbeeld

Code-uitleg: -

  1. De eerste stap is het maken van de onderliggende klasse Guru99Tutorial. We moeten ook vermelden dat deze klas een kindklas van de Tutorial-klas zal zijn. Dit wordt gedaan door het trefwoord ':'.
  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: – Ook al hebben we het veld TutorialName niet gedefinieerd in de klasse “Guru99Tutorial”, toch hebben we nog steeds toegang tot dit veld. Dit komt door het feit dat “Guru99Tutorial” een onderliggende klasse van de Tutorial-klasse is. En omdat we de velden van de Tutorial-klasse beveiligd hebben gemaakt, zijn ze toegankelijk voor deze klasse.

Stap 3) De laatste stap is het wijzigen van ons hoofdprogramma.cs-bestand. In onze consoletoepassing gaan we een object maken van de klasse Guru99Tutorial. 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 maken van een object voor de klasse Guru99Tutorial. Dit gebeurt via het trefwoord 'nieuw'. Houd er rekening mee dat we deze keer geen object van de klasse Tutorial maken.
  2. We gebruiken de RenameTutorial-methode van de Guru99Tutorial-klasse om het TutorialName-veld te wijzigen. We geven de string “.Net by Guru99” door aan de RenameTutorial-methode.
  3. Vervolgens roepen we de GetTutorial-methode aan. Merk op dat ook al is deze methode niet gedefinieerd in de klasse Guru99Tutorial, we nog steeds toegang hebben tot deze methode. De uitvoer van de GetTutorial-methode wordt vervolgens weergegeven op de console via de Console.WriteLine-methode.

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 by Guru99". Dit werd mogelijk gemaakt door de RenameTutorial-methode die door de onderliggende klasse werd aangeroepen.

Wat is polymorfisme in C#?

polymorfisme in C# is een OOPs-concept waarbij één naam vele vormen kan hebben. Bijvoorbeeld, je hebt een smartphone voor communicatie. De communicatiemodus die je kiest kan van alles zijn. Het kan een oproep, een sms, een fotobericht, mail, etc. zijn. Dus, het doel is gemeenschappelijk, dat wil zeggen communicatie, maar hun aanpak is anders. Dit wordt Polymorphism genoemd.

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 behouden 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 wijzigen van ons hoofdprogramma.cs-bestand. In onze consoletoepassing gaan we een object maken van de klasse Guru99Tutorial.

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.

Samenvatting

  • Bij overerving erft een onderliggende klasse de velden en methoden van de bovenliggende klasse. De onderliggende klasse kan dan ook zijn eigen methoden definiëren.
  • Polymorfisme in C# is een OOPs-concept waarbij één naam vele vormen kan hebben.