Явная проблема приведения
// The Structure of the Container and the items
public interface IContainer <TItem> where TItem : IItem
{
}
public class AContainer : IContainer<ItemA>
{
}
public interface IItem
{
}
public class ItemA : IItem
{
}
// Client app
[Test]
public void Test ()
{
IContainer<IItem> container = new AContainer();
}
Вопрос: в тесте возникает следующая ошибка. Какое может быть решение для кастинга?
Невозможно неявно преобразовать тип 'AContainer' в 'IContainer'. Существует явное преобразование (вам не хватает приведения?)
3 ответа
Решение
Еще одна ковариантная проблема обобщений...
Универсальные типы в.NET не являются ковариантными или контравариантными - IContainer
Если вы хотите использовать AContainer
быть IContainer<IItem>
Вам также нужно реализовать этот интерфейс:
public class AContainer : IContainer<ItemA>, IContainer<IItem>
Вы можете реализовать это явно.
Вы также можете рассмотреть имитацию ковариации для.NET Generics Кшиштофа Квалина