对集合的通用引用

时间:2013-10-15 09:39:01

标签: c# generics inheritance collections

我有两个基类:

class BaseCollection<T> where T : BaseCollectionItem
{

}

class BaseCollectionItem
{

}

这些是基类,后面按以下方式进行子类化:

class MyCollection : BaseCollection<MyItem>
{

}

class MyItem : BaseCollectionItem
{

}

我想存储对集合的引用,集合中包含BaseCollectionItem中的项目。我该怎么办?

class BaseCollectionItem
{
    private ??? ownerCollection;
}

2 个答案:

答案 0 :(得分:0)

如果您正在寻找BananaCollection(BaseCollection)以始终包含Bananas并且您希望Banana始终位于BananaCollection(BaseCollection)中,那么您将拥有循环泛型类型参数的情况。

您可以查看circular generic type parameters了解详情。

答案 1 :(得分:0)

看起来你想要对你的领域的类型进行协方差,这是不能干净利落的。

你可以尝试使用Curiously Recurring Generic Pattern作为described by Eric Lippert here,但要注意这些问题!

我并不只是指所述文章中描述的问题,而是一些你自己介绍的问题。例如:为什么您不希望将Giraffe存储在BaseCollection<Mammal>