0
// 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”。存在显式转换(您是否缺少演员表?)

4

3 回答 3

3

另一个泛型协变问题...

.NET 中的泛型类型不是协变或逆变的 - IContainer<ItemA> (这是 AContainer 是什么)不是 IContainer<IItem> 的子类 - 两者之间没有有效的转换。这将在 C# 4 中修复。

于 2009-09-18T09:02:15.713 回答
1

如果你想用作AContainer一个IContainer<IItem>,你还需要实现这个接口:

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

您可以显式地实现它。

于 2009-09-18T09:10:02.773 回答
0

您还可以考虑Krzysztof Cwalina 的 .NET 泛型的模拟协方差

于 2009-09-18T09:10:10.783 回答