我有两个基类:
class BaseCollection<T> where T : BaseCollectionItem
{
}
和
class BaseCollectionItem
{
}
这些是基类,后面按以下方式进行子类化:
class MyCollection : BaseCollection<MyItem>
{
}
class MyItem : BaseCollectionItem
{
}
我想存储对集合的引用,集合中包含BaseCollectionItem
中的项目。我该怎么办?
class BaseCollectionItem
{
private ??? ownerCollection;
}
答案 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>
?