Método virtual llamado desde derivado en lugar de base

Alguien me puede explicar por qué se está invocando el método anulado cuando lanzo la clase a la base:

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

Me refiero a que este código se imprime:

Overriden method

y no

Base virtual method

¿Es un futuro en tiempo de ejecución o de compilación?

Sé que puedo llamar al método virtual de la Base desde el derivado al llamarbase.VirtualMethod() ¿Pero puedo llamarlo desde fuera? (como deMain o alguna otra clase)

Respuestas a la pregunta(2)

Su respuesta a la pregunta