情况如下:
有一个类型BaseObject
的基类,从中派生所有其他类(即Task : BaseObject
)。
还有一个类型为BaseObjectCollection
的基类集合,它继承自Dictionary<ulong,BaseObject>
以及从中继承的一些其他集合(即TaskCollection:BaseObjectCollection
)。
迭代TaskCollection
成员时,它们会显示为BaseObject
类型。
有没有办法让集合“更改”其值的类型,以便它具有BaseobjectCollection
的功能,但显示为Dictionary<ulong,Task>
而不是Dictionary<ulong,BaseObject>
答案 0 :(得分:1)
您应该将BaseObjectCollection
类型更改为它将使用的值类型的通用类型。例如:
public class BaseObjectCollection<T> : Dictionary<ulong, T>
where T : BaseObject
然后你可以使用BaseObjectCollection<Task>
并且仍然是完全类型安全的。
(在大多数情况下,我个人会使用构图,而不是从Dictionary<,>
派生新类型,但这是另一回事。)