Почему ковариация возвращаемого типа (C#9) не работает на интерфейсах? [дубликат]C#

Место общения программистов C#
Anonymous
Почему ковариация возвращаемого типа (C#9) не работает на интерфейсах? [дубликат]

Сообщение Anonymous »

Ковариация позволяет определить новый тип в переопределенном методе базового класса, если вновь возвращаемый тип является унаследованным типом исходного, например

Код: Выделить всё

internal class Car { }

internal class Bmw : Car { }

internal class CarManager
{
public virtual Car CreateCar()
=> new();
}

internal class BmwManager : CarManager
{
public override Bmw CreateCar()
=> new();
}
Но когда он пытается подключиться вот так:

Код: Выделить всё

internal class CarManager : ICarManager
{
public virtual Car CreateCar()
=> new();
}

internal class BmwManager : CarManager, IBmwManager
{
public override Bmw CreateCar()
=> new();
}

internal interface ICarManager
{
Car CreateCar();
}

internal interface IBmwManager : ICarManager
{
Bmw CreateCar(); //hide warning comes here
}
Я получаю предупреждение компилятора о том, что IBmwManager.CreateCar() скрывает ICarManager.CreateCar(), и я должен использовать ключевое слово new здесь. Скрытие — это то, что вам всегда приходилось делать перед ковариацией, если вы хотели сделать что-то подобное, даже на уровне класса. Но теперь он работает на уровне класса, а не на уровне интерфейса, почему?

Подробнее здесь: https://stackoverflow.com/questions/791 ... interfaces

Вернуться в «C#»