显式铸造问题

时间:2009-09-18 08:59:46

标签: c# generics casting explicit

// 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 个答案:

答案 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)