Виртуальный метод вызывается из производного вместо базового

Может кто-нибудь объяснить мне, почему переопределенный метод вызывается, когда я преобразую класс в базовый:

    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();
    }

Я имею в виду этот код печатает:

Overriden method

и не

Base virtual method

Это будущее во время выполнения или во время компиляции?

Я знаю, что могу позвонить на базуВиртуальный метод из производного путем вызоваbase.VirtualMethod() но я могу позвонить извне? (как изMain или какой-то другой класс)

Ответы на вопрос(2)

Ваш ответ на вопрос