【问题标题】:Type inheritance in Dictionary<ulong,BaseObject>Dictionary<ulong,BaseObject> 中的类型继承
【发布时间】:2009-11-30 15:38:21
【问题描述】:

情况如下: 有一个 BaseObject 类型的基类,所有其他类都从该基类派生(即 Task : BaseObject)。 还有一个BaseObjectCollection 类型的基类集合,它继承自Dictionary&lt;ulong,BaseObject&gt; 和一些其他继承自它的集合(即TaskCollection:BaseObjectCollection)。 当迭代 TaskCollection 成员时,它们显示为 BaseObject 类型。 有没有办法让集合“改变”它的值的类型,以便它拥有BaseobjectCollection 的功能,但显示为Dictionary&lt;ulong,Task&gt; 而不是Dictionary&lt;ulong,BaseObject&gt;

【问题讨论】:

  • 本例我使用的是C#语言

标签: c# inheritance dictionary types generics


【解决方案1】:

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

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

然后您可以使用 BaseObjectCollection&lt;Task&gt; 并且仍然是完全类型安全的。

(在大多数情况下,我个人会使用组合,而不是从 Dictionary&lt;,&gt; 派生新类型,但这是另一回事。)

【讨论】:

  • 非常感谢,这让我大开眼界,因为我只是泛型类型的新手。顺便说一句,为什么你更喜欢作文而不是使用字典?
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多