// 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”。存在显式转换(您是否错过了演员?)
答案 0 :(得分:3)
另一个泛型协变问题......
.NET中的通用类型不是协变的或逆变的 - IContainer&lt; ItemA&gt; (这是AContainer所说的)不是IContainer的子类&lt; IItem&gt; - 两者之间没有有效的演员表。这将在C#4中修复。
答案 1 :(得分:1)
如果您想将AContainer
用作IContainer<IItem>
,则还需要实现此界面:
public class AContainer : IContainer<ItemA>, IContainer<IItem>
您可以明确地实施它。
答案 2 :(得分:0)