Как правильно перекрыть или скрыть существующий родительский метод?
При наследовании сначала создаются методы базового типа, а потом дополняются методами наследника. Вы инстанциируете класс GrandFather, что, кстати, странно. Отсюда получается два варианта:GrandFather gf = new GrandSon();
            Console.WriteLine(((GrandSon) gf).GetDescription());
либоGrandSon gf = new GrandSon();
            Console.WriteLine(gf.GetDescription());
Попробуй приведение типов использовать, когда экземпляр GrandSon создаешь.
GrandFather gf = (GrandSon) new GrandSon();