Metody Wirtualne to po prostu metody, które można nadpisać w klasie dziedziczącej.
Metoda wirtualna jest oznaczana słowem kluczowym virtual.
Czas na szybki przykład pokazujący co i jak 🙂
public class Book
{
public int GetPageCount()
{
return 300;
}
public virtual string GetPrice()
{
return "30 złoty";
}
}
public class PromotionBook : Book
{
public override string GetPrice()
{
return "15 złoty";
}
}
Jak widać mamy klasę GetPrice, która może zostać nadpisana w klasie PromotionBook, która dziedziczy po klasie Book.
Metoda GetPageCount nie może być nadpisana, ponieważ nie jest wirtualna.
Istnieje też możliwość odwołania się do zawartości metody wirtualnej w klasie dziedziczącej przy użyciu słowa base.
public class Book
{
public int GetPageCount()
{
return 300;
}
public virtual int GetPrice()
{
return 30;
}
}
public class PromotionBook : Book
{
public override int GetPrice()
{
return base.GetPrice() / 2;
}
}
W powyższym przykładzie w klasie PromotionBook nadpisana zostaje metoda GetPrice, w której odwołujemy się do metody bazowej, którą nadpisujemy za pomocą base.GetPrice() następnie obcinamy cenę o połowę.
Na koniec jeszcze dwa zdanie odnośnie różnicy między metodami wirtualnymi i abstrakcyjnymi.
Metody abstrakcyjne muszą być nadpisane w klasie dziedziczącej, ponieważ nie posiadają one ciała. Metody wirtualne mogą, ale nie muszą być nadpisane oraz posiadają ciało.
Temat metod wirtualnych jest dosyć prosty i bardzo przydatny w pisaniu kodu, także warto pamiętać o tym, że metody wirtualne istnieją.