Ковариантный результат override в C#
Ковариантный возвращаемый тип override должен быть производным от типа
базового метода. Вызов через базовую ссылку остаётся типобезопасным.
Через переменную Factory метод Create возвращает объект Special, а в контракте базы тип остаётся Item. Своей метки у Special нет, поэтому видна метка базы:
Factory f = new Factory2();
Console.WriteLine(f.Create().Label); // выведет "item"
class Item { public string Label => "item"; }
class Special : Item { }
class Factory
{
public virtual Item Create() => new Item();
}
class Factory2 : Factory
{
public override Special Create() => new Special();
}
Сделайте метод базы, который возвращает животное, а в наследнике верните собаку.
Вызовите метод через переменную базового типа и выведите кличку "Rex".