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ę)

questionAnswers(2)

yourAnswerToTheQuestion