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

⚡ Inteligentne podsumowanie

Dziedziczenie i polimorfizm w C# to dwie podstawowe zasady obiektowości. Dziedziczenie pozwala klasie potomnej ponownie wykorzystywać pola i metody klasy nadrzędnej, podczas gdy polimorfizm pozwala, aby jedna nazwa metody przyjmowała wiele form.

  • 🧬 Dziedzictwo: Klasa podrzędna dziedziczy pola i metody klasy nadrzędnej i może dodawać swoje własne.
  • 🔒 Chronieni członkowie: Oznaczenie pól nadrzędnych jako chronione pozwala klasie pochodnej na ich bezpośrednie ponowne wykorzystanie.
  • 🧩 Wielopostaciowość: Jedna nazwa metody może mieć wiele form, więc pojedyncze wywołanie zachowuje się różnie w zależności od kontekstu.
  • 🔀 Przeciążanie metod: Kilka metod ma wspólną nazwę, ale różni się parametrami, które są ustalane w czasie kompilacji.
  • 🧱 Code ponowne użycie: Obie zasady eliminują duplikację kodu i zapewniają spójność powiązanych klas.
  • 🤖 Pomoc AI: GitHub Copilot tworzy szkielety klas bazowych i pochodnych; ML.NET wykorzystuje hierarchie klas jako dane wejściowe modelu.

Dziedziczenie i polimorfizm w C#

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ętasz, że wspomnieliśmy o tym modyfikatorze dostępu w Samouczek dotyczący modyfikatora dostępu. No cóż, tutaj widać cel tego. Tylko z tym modyfikatorem dostępu (protected) klasa potomna będzie mogła korzystać z pól klasy nadrzędnej.

Krok 2) Drugim krokiem jest dodanie nowej klasy potomnej. Nazwa tej klasy będzie brzmiała „Guru99Tutorial”. W tym kroku dodajemy poniższy kod do pliku Tutorial.cs. Kod powinien znaleźć się po definicji klasy Tutorial.

Przykład dziedziczenia w języku C#

Code Wyjaśnienie:-

  1. Pierwszym krokiem jest stworzenie GuruKlasa potomna Tutorial. Musimy również wspomnieć, że ta klasa będzie klasą potomną klasy Tutorial. Robi 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 „Guru99Tutorial”, nadal mamy dostęp do tego pola. Dzieje się tak, ponieważ „Guru„99Tutorial” jest klasą potomną klasy Tutorial. Ponieważ pola klasy Tutorial zostały oznaczone jako chronione, ta klasa ma do nich dostęp.

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

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

Code Wyjaśnienie:-

  1. Pierwszym krokiem jest utworzenie obiektu dla GuruKlasa 99Tutorial. Robi się to za pomocą słowa kluczowego „new”. Należy pamiętać, że tym razem nie tworzymy obiektu klasy Tutorial.
  2. Używamy metody RenameTutorial GuruKlasa 99Tutorial do zmiany pola TutorialName. Przekazujemy ciąg „.Net” Guru99” do metody RenameTutorial.
  3. Następnie wywołujemy metodę GetTutorial. Należy pamiętać, że chociaż ta metoda nie jest zdefiniowana w GuruW klasie 99Tutorial nadal mamy dostęp do tej metody. 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 pole TutorialName zostało zmienione na „.Net przez Guru99”. Stało się to możliwe dzięki metodzie RenameTutorial wywoływanej przez klasę potomną.

Co to jest polimorfizm w C#?

Wielopostaciowość in C# To koncepcja 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 telefoniczne, SMS, wiadomość graficzną, e-mail itp. Cel jest zatem wspólny, czyli komunikacja, ale 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#

Code Wyjaśnienie:-

1 i 2) Pierwszy krok jest taki sam jak w naszych poprzednich przykładach.ping definicja metody SetTutorial taka, jaka jest.

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 Guru99Klasa samouczka.

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

Code Wyjaśnienie:-

  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”.

FAQ

C# obsługuje dziedziczenie jedno-, wielopoziomowe i hierarchiczne poprzez klasy. Dziedziczenie wielokrotne jest możliwe wyłącznie poprzez interfejsy.

Nie. Klasa AC# dziedziczy tylko z jednej klasy bazowej. Dziedziczenie wielokrotne wykorzystuje kilka interfejsów.

Przeciążanie używa jednej nazwy z różnymi parametrami w czasie kompilacji. Nadpisywanie redefiniuje wirtualną metodę bazową w czasie wykonywania.

Słowo kluczowe virtual sprawia, że ​​metoda bazowa staje się możliwa do nadpisania; słowo kluczowe override definiuje ją ponownie w klasie pochodnej.

Słowo kluczowe base pozwala klasie pochodnej wywołać konstruktora nadrzędnego lub dotrzeć do ukrytych albo nadpisanych elementów bazowych.

Oznacz klasę jako zapieczętowaną. Klasa zapieczętowana nie może być klasą bazową, co zapobiega dalszemu dziedziczeniu i poprawia wydajność.

Tak. GitHub Copilot tworzy szkielet klasy bazowej i podrzędnej oraz dodaje metody wirtualne i nadrzędne z komentarza lub nazwy klasy.

ML.NET definiuje klasy danych i predykcji, które dziedziczą współdzielone elementy, a jego potok wykorzystuje wspólny typ bazowy transformatora.

Podsumuj ten post następująco: