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

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

0 голосов
/ 18 сентября 2009
// 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 ]

3 голосов
/ 18 сентября 2009

Еще одна ковариантная задача обобщений ...

Универсальные типы в .NET не являются ковариантными или контравариантными - IContainer (то, чем является AContainer) не является подклассом IContainer - между ними нет действительных приведений. Это будет исправлено в C # 4.

1 голос
/ 18 сентября 2009

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

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

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

0 голосов
/ 18 сентября 2009
...