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>のサブクラスではありません-2つの間に有効なキャストはありません。これは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

KrzysztofCwalinaによる.NETジェネリックのシミュレートされた共分散を検討することもできます

于 2009-09-18T09:10:10.783 に答える