Допустим, у меня есть класс, который реализует универсальный интерфейс
открытый интерфейс IItem {}
public interface IStuff<out TItem> where TItem : IItem
{
TItem FavoriteItem { get; }
}
public class MyStuff<TItem> : IStuff<TItem> where TItem : IItem
{
public TItem FavoriteItem
{
get { throw new NotImplementedException(); }
}
}
У меня есть также один неуниверсальный интерфейс
public interface IFavoriteItem
{
IItem FavoriteItem { get; }
}
Я бы хотел, чтобы класс MyStuff реализовывал этот интерфейс IFavoriteItem. Поскольку TItem реализует IItem, мне кажется, что свойство public TItem FavoriteItem
уже реализует IFavoriteItem.
Но компилятор так не думает, и он хочет, чтобы я объявил отдельный IItem IFavoriteItem.FavoriteItem
в MyClass. Почему это так? Разве c # ковариация не должна играть здесь и решить мою проблему?
Спасибо