Явная проблема приведения

// 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 - между ними нет действительного приведения. Это будет исправлено в C# 4.

Если вы хотите использовать AContainer быть IContainer<IItem>Вам также нужно реализовать этот интерфейс:

public class AContainer : IContainer<ItemA>, IContainer<IItem>

Вы можете реализовать это явно.

Другие вопросы по тегам