Wirtualna metoda zwana od pochodnej zamiast bazy
Czy ktoś może mi wyjaśnić, dlaczego nadpisywana metoda jest wywoływana, gdy rzucam klasę do klasy podstawowej:
class Base
{
public virtual void VirtualMethod()
{
Console.WriteLine("Base virtual method");
}
}
sealed class Derived : Base
{
public override void VirtualMethod()
{
Console.WriteLine("Overriden method");
}
}
static void Main(String[] args)
{
Derived d = new Derived();
((Base)d).VirtualMethod();
}
Mam na myśli ten kod:
Overriden method
i nie
Base virtual method
Jest to przyszłość w czasie rzeczywistym lub w czasie kompilacji?
Wiem, że mogę wywołać wirtualną metodę Bazy z wyprowadzonej przez wywołaniebase.VirtualMethod()
ale czy mogę to nazwać z zewnątrz? (jak zMain
lub jakąś inną klasę)