Dziedziczenie i polimorfizm w języku C# z przykładami programów

Co to jest dziedziczenie w C#?

Dziedzictwo jest ważną koncepcją języka C#. Dziedziczenie to koncepcja, w której definiujesz klasy nadrzędne i klasy podrzędne. Klasy potomne dziedziczą metody i właściwości klasy nadrzędnej, ale jednocześnie, jeśli zajdzie taka potrzeba, mogą również modyfikować zachowanie metod. W razie potrzeby klasa potomna może również definiować własne metody.

Przyjrzyjmy się lepiej dziedziczeniu C# na przykładzie programu:

Przykład dziedziczenia w języku C#

Zobaczmy teraz, jak możemy włączyć koncepcję dziedziczenia do naszego kodu.

Krok 1) Pierwszym krokiem jest zmiana kodu naszej klasy Tutorial. W tym kroku dodamy poniższy kod do pliku Tutorial.cs.

Przykład dziedziczenia w języku C#

Zauważ, że musimy teraz dodać modyfikator dostępu „protected” zarówno do pola TutorialID, jak i TutorialName.

Pamiętaj, że wspomnieliśmy o tym modyfikatorze dostępu w samouczku dotyczącym modyfikatora dostępu. Cóż, tutaj możesz zobaczyć cel posiadania tego. Tylko wtedy, gdy masz ten modyfikator dostępu (chroniony), klasa potomna będzie mogła korzystać z pól klasy nadrzędnej.

Krok 2) Drugim krokiem jest dodanie naszej nowej klasy podrzędnej. Nazwa tych zajęć będzie brzmieć „Guru99Tutorial”. W tym kroku dodamy poniższy kod do pliku Tutorial.cs. Kod należy umieścić po definicji klasy Tutorial.

Przykład dziedziczenia w języku C#

Wyjaśnienie kodu: -

  1. Pierwszym krokiem jest utworzenie klasy podrzędnej Guru99Tutorial. Musimy również wspomnieć, że ta klasa będzie klasą podrzędną klasy Tutorial. Odbywa się to za pomocą słowa kluczowego „:”.
  2. Następnie definiujemy metodę o nazwie RenameTutorial. Zostanie ono użyte do zmiany nazwy pola TutorialName. Metoda ta akceptuje zmienną typu string, która zawiera nową nazwę tutoriala.
  3. Następnie przypisaliśmy parametr pNewName do pola TutorialName.
    Note: – Mimo że nie zdefiniowaliśmy pola TutorialName w klasie „Guru99Tutorial”, nadal mamy dostęp do tego pola. Dzieje się tak dlatego, że „Guru99Tutorial” jest klasą podrzędną klasy Tutorial. A ponieważ pola klasy Tutorial zabezpieczyliśmy, ta klasa może uzyskać do nich dostęp.

Krok 3) Ostatnim krokiem jest modyfikacja naszego głównego pliku Program.cs. W naszej aplikacji konsolowej utworzymy obiekt klasy Guru99Tutorial. Za pomocą tego obiektu wywołamy metodę RenameTutorial. Następnie za pomocą metody GetTutorial wyświetlimy pole TutorialName.

Przykład dziedziczenia w języku 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(); 
  }
 }
}

Wyjaśnienie kodu: -

  1. Pierwszym krokiem jest utworzenie obiektu dla klasy Guru99Tutorial. Odbywa się to za pomocą słowa kluczowego „nowy”. Należy pamiętać, że tym razem nie tworzymy obiektu klasy Tutorial.
  2. Do zmiany pola TutorialName używamy metody RenameTutorial klasy Guru99Tutorial. Do metody RenameTutorial przekazujemy ciąg „.Net by Guru99”.
  3. Następnie wywołujemy metodę GetTutorial. Należy zauważyć, że mimo iż ta metoda nie jest zdefiniowana w klasie Guru99Tutorial, nadal możemy uzyskać do niej dostęp. Dane wyjściowe metody GetTutorial są następnie wyświetlane na konsoli za pomocą metody Console.WriteLine.

Jeśli powyższy kod został wpisany poprawnie i program zostanie pomyślnie wykonany, wyświetlony zostanie następujący komunikat.

Wyjście:

Przykład dziedziczenia w języku C#

Z wyników wyraźnie widać, że nazwa pola TutorialName została zmieniona na „.Net by Guru99”. Było to możliwe dzięki metodzie RenameTutorial wywoływanej przez klasę potomną.

Co to jest polimorfizm w C#?

Wielopostaciowość w C# jest koncepcją OOPs, w której jedna nazwa może mieć wiele form. Na przykład masz smartfon do komunikacji. Tryb komunikacji, który wybierzesz, może być dowolny. Może to być połączenie, wiadomość tekstowa, wiadomość obrazkowa, poczta itp. Tak więc cel jest wspólny, czyli komunikacja, ale ich podejście jest inne. To się nazywa polimorfizm.

Lepsze zrozumienie polimorfizmu C# uzyskasz dzięki poniższemu przykładowi programu:

Przykład polimorfizmu C#

Zobaczmy teraz, jak możemy włączyć koncepcję polimorfizmu do naszego kodu.

Krok 1) Pierwszym krokiem jest zmiana kodu naszej klasy Tutorial. W tym kroku dodamy poniższy kod do pliku Tutorial.cs.

Przykład polimorfizmu C#

Wyjaśnienie kodu: -

1 i 2) Pierwszy krok jest taki sam, jak w naszych wcześniejszych przykładach. Zachowujemy definicję metody SetTutorial w obecnej postaci.

3) Ta metoda ustawia TutorialID i TutorialName w oparciu o parametry pID i pName.

4) W tym miejscu dokonujemy zmiany w naszej klasie, dodając nową metodę o tej samej nazwie SetTutorial. Tylko tym razem przekazujemy tylko jeden parametr, którym jest pName. W tej metodzie po prostu ustawiamy pole TutorialName na pName.

Krok 2) Ostatnim krokiem jest modyfikacja naszego głównego pliku Program.cs. W naszej aplikacji konsolowej utworzymy obiekt klasy Guru99Tutorial.

Przykład polimorfizmu C#

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(); 
  }
 }
}

Wyjaśnienie kodu: -

  1. W pierwszym kroku używamy metody SetTutorial z 2 parametrami. Gdzie przekazujemy do tej metody zarówno TutorialID, jak i TutorialName.
  2. W drugim kroku wywołujemy teraz metodę SetTutorial z tylko jednym parametrem. Po prostu przekazujemy nazwę TutorialName do tej metody.

Jeśli powyższy kod zostanie wprowadzony poprawnie i program zostanie uruchomiony, zostanie wyświetlony następujący wynik. Jeśli chcesz również pobrać identyfikator Tutorial ID wraz z nazwą Tutorial Name, powinieneś wykonać poniższy krok

  1. Utwórz osobną metodę o nazwie public int GetTutorialID
  2. W tej metodzie wpisz linię kodu „return TutorialID”. Można tego użyć do zwrócenia identyfikatora TutorialID do programu wywołującego.

Wyjście:

Przykład polimorfizmu C#

Z danych wyjściowych wyraźnie wynika, że ​​obie metody zostały pomyślnie wywołane. Z tego powodu do konsoli zostały wysłane ciągi „Pierwszy samouczek” i „Drugi samouczek”.

Podsumowanie

  • Dziedziczenie ma miejsce wtedy, gdy klasa potomna dziedziczy pola i metody klasy nadrzędnej. Klasa potomna może następnie zdefiniować własne metody.
  • Polimorfizm w C# to koncepcja OOP, w której jedna nazwa może mieć wiele form.