Metody wirtualne
widget
Metody wirtualne pozwalają na przesłanianie (zastępowanie) metod w podklasach.
#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
Wkradł się błąd "Aby zasłonić metodę z klasy bazowej w klasie nadrzędnej"
Kasa bazowa jest klasą nadrzędną, powinno być "w klasie pochodnej".
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...
pomyliłem się, ten artykuł jest o przestrzeniach nazw, a wrzuciłem go do funkcji wirtualnych :/
Eee.. po co usunąłeś zawartość tego tekstu? :/
Wnioskuje o zmiane tytulu na "metody wirtualne".