1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

Polimorfizm dynamiczny

Polimorfizm dynamiczny, inaczej zwany "runtime polymorphism" lub "overriding", polega na tym, że metoda o tej samej nazwie i sygnaturze (liczba i typ argumentów) może zachowywać się inaczej w zależności od typu obiektu, na którym jest wywoływana.

Jeżeli masz zdefiniowaną metodę w klasie bazowej, ale chcesz, żeby została zaimplementowana w klasach pochodnych możesz do tego celu zastosować metody wirtualne .

								
using System;

class Program
{
    static void Main()
    {
        Zwierzeta[] listaZwierzat = { new Pies(), new Kot() }; // Tworzenie tablicy obiektów typu Zwierzeta zawierającej instancje klasy Pies i Kot

        foreach (Zwierzeta ssaki in listaZwierzat) // Iteracja po wszystkich elementach tablicy
        {
            ssaki.DajGlos(); // Wywołanie metody DajGlos() dla każdego obiektu
        }
    }

    class Zwierzeta
    {
        public virtual void DajGlos() // Metoda wirtualna, która może być przesłonięta w klasach pochodnych
        {
            Console.WriteLine("zwierzę wydaje dźwięk"); // Wyświetlenie informacji o dźwięku wydawanym przez zwierzę
        }
    }

    class Pies : Zwierzeta
    {
        public override void DajGlos() // Przesłonięcie metody DajGlos() z klasy bazowej
        {
            Console.WriteLine("Hau hau!"); // Wyświetlenie dźwięku szczekania psa
        }
    }

    class Kot : Zwierzeta
    {
        public override void DajGlos() // Przesłonięcie metody DajGlos() z klasy bazowej
        {
            Console.WriteLine("Miauu!"); // Wyświetlenie dźwięku miauczenia kota
        }
    }
}
								
						
Wyjaśnienie

W tym przykładzie, klasa Zwierzęta posiada metodę DajGlos() oznaczoną jako wirtualną, co pozwala na jej przesłanianie w klasie dziedzicznej Kot. W metodzie Main program tworzy tablicę z obiektem klasy dziedzicznej Zwierzęta i wywołuje na nich DajGlos(). W wyniku tego każdy obiekt wykona swoją własną implementację metody DajGlos() i wyświetli odpowiedni dźwięk.