Metody wirtualne
Metody wirtualne pozwalają na przesłanianie (zastępowanie) metod w podklasach.
Wynik będzie następujący:
Teraz pracownik tyle dostal: 100
Teraz pracownik (programista) tyle dostal: 500
Teraz pracownik (admin) tyle dostal: 150
- Do definiowania metody wirtualnej służy słowo kluczowe: virtual
- Aby zasłonić metodę z klasy bazowej w klasie nadrzędnej należy zdefiniować funkcje ze słowem kluczowym override z dokładnie tą samą nazwą i parametrami.
- Aby odwołać się do przesłoniętej metody należy użyć słowa kluczowego base.
- Nie jest wymogiem przesłanianie metody wirtualnych w klasach nadrzędnych.
class Pracownik { public float pensja; public virtual void WyplacPensje(float kwota) { pensja += kwota; } } class Programista : Pracownik { public override void WyplacPensje(float kwota) { base.WyplacPensje(kwota); //odwołanie się do przysłoniętej funkcji pensja += 200; // 200 zł premii } } class Administrator : Pracownik { public override void WyplacPensje(float kwota) { pensja += 150; // 150 zł premii } } class Program { static void Main(string[] args) { Pracownik pracownik = new Pracownik(); Programista programista = new Programista(); Administrator admin = new Administrator(); pracownik.WyplacPensje(100); Console.WriteLine("Teraz pracownik tyle dostal: " + pracownik.pensja); // 100 programista.WyplacPensje(300); pracownik = programista; Console.WriteLine("Teraz pracownik (programista) tyle dostal: " + pracownik.pensja); // 300 + 200 = 500 admin.WyplacPensje(300); pracownik = admin; Console.WriteLine("Teraz pracownik (admin) tyle dostal: " + pracownik.pensja); // 150 - tylko premia }
Wynik będzie następujący:
Teraz pracownik tyle dostal: 100
Teraz pracownik (programista) tyle dostal: 500
Teraz pracownik (admin) tyle dostal: 150
Kategoria: C#
4 komentarze
pomyliłem się, ten artykuł jest o przestrzeniach nazw, a wrzuciłem go do funkcji wirtualnych :/
Tak sobie myślę, może by przenieść ten tekst do kategorii głównej "C sharp"? Tekst dotyczy opisu języka C#, więc powinien się tam IMO znaleźć, a z drugiej strony są w "C sharp/Podręcznik" linki do Funkcji wirtualnych itd...