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