Имеется базовый абстрактный класс (менять его нельзя), в котором есть метод GetDescription()
public abstract class GrandFather
{
public string Description = "Grandfather";
public string GetDescription()
{
return Description;
}
public abstract double GetAge();
}
От него наследуется другой абстрактный класс, в котором я пытаюсь перекрыть исходный метод GetDescription()
public abstract class Son: GrandFather
{
public new abstract string GetDescription();
}
От него наследуется третий класс, в котором должна выполниться собственная реализация метода GetDescription()
public class GrandSon: Son
{
public override string GetDescription()
{
return "Grandson";
}
public override double GetAge()
{
return 10;
}
}
Выполняю код
GrandFather gf = new GrandSon();
Console.WriteLine(gf.GetDescription());
Console.WriteLine(gf.GetAge());
Выводится: GrandFather, 10. Т.е. метод GetAge() выполняется в GrandSon, а вот метод GetDescription() выполняется из GrandFather.
Как правильно перекрыть метод GetDescription(), чтобы он выполнялся из GrandSon?
Дополнение: это я пытаюсь перевести на C# пример, написанный на Java, из книги "Паттерны проектирования" Фрименов. Пример относится к паттерну Декоратор и в условиях задачи класс GrandFather (Beverage в книге) взят из API заказчика и его нельзя менять.
Решение с Console.WriteLine(((Grandson)gf).GetDescription()) локально подходит, но для всей задачи мне нужно именно перекрыть метод GetDescription() в Son.