对集合的通用引用

本文关键字:引用 集合 | 更新日期: 2023-09-27 18:35:28

我有两个基类:

class BaseCollection<T> where T : BaseCollectionItem
{
}

class BaseCollectionItem
{
}

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

class MyCollection : BaseCollection<MyItem>
{
}
class MyItem : BaseCollectionItem
{
}

我想存储对集合的引用,该集合在BaseCollectionItem中保存一个项目。我该怎么做?

class BaseCollectionItem
{
    private ??? ownerCollection;
}

对集合的通用引用

如果你正在寻找 BananaCollection(BaseCollection

) 总是包含 Bananas,并且希望 Banana 始终在 BananaCollection (BaseCollection) 中,那么你有一个循环泛型类型参数的情况。

可以查看循环泛型类型参数以获取更多信息。

看起来您希望字段类型出现协方差,这无法干净地完成。

您可以尝试使用Eric Lippert在此处描述的奇怪重复通用模式来执行此操作,但要注意问题!

我指的不仅仅是上述文章中描述的问题,还有一些你介绍自己。例如:为什么不希望将Giraffe存储在BaseCollection<Mammal>中?