在Dictionary <ulong,baseobject> </ulong,baseobject>中键入继承

时间:2009-11-30 15:38:22

标签: c# inheritance dictionary types generics

情况如下: 有一个类型BaseObject的基类,从中派生所有其他类(即Task : BaseObject)。 还有一个类型为BaseObjectCollection的基类集合,它继承自Dictionary<ulong,BaseObject>以及从中继承的一些其他集合(即TaskCollection:BaseObjectCollection)。 迭代TaskCollection成员时,它们会显示为BaseObject类型。 有没有办法让集合“更改”其值的类型,以便它具有BaseobjectCollection的功能,但显示为Dictionary<ulong,Task>而不是Dictionary<ulong,BaseObject>

1 个答案:

答案 0 :(得分:1)

您应该将BaseObjectCollection类型更改为它将使用的值类型的通用类型。例如:

public class BaseObjectCollection<T> : Dictionary<ulong, T>
    where T : BaseObject

然后你可以使用BaseObjectCollection<Task>并且仍然是完全类型安全的。

(在大多数情况下,我个人会使用构图,而不是从Dictionary<,>派生新类型,但这是另一回事。)