【发布时间】:2014-01-21 07:47:35
【问题描述】:
我正在尝试创建一个集合,每个类型只包含一个元素。然而,每种类型都必须继承一个根类型,以便具有共性。 我做了一些研究,想知道我是否走在正确的轨道上,或者是否可以进行一些改进:
class TypedList<T> : Dictionary<Type, T> {
public override void Add<C>(T instanceOfType) {
base.Add(typeof(C), instanceOfType);
}
}
具体问题:
- 这是正确/最好的方法吗?
- 我应该怎么做才能方便检索元素?
- 如果 Add() 方法是正确的,有没有办法强制 C 是 T 的子类?
更新代码以反映 Ondrej 的建议:
class TypedList<Abstract> : IList<Abstract> {
protected Dictionary<Type, Abstract> data;
public void TypedList() {
data = new Dictionary<Type, Abstract>();
}
public void Add<Concrete>(Concrete instanceOfType) where Concrete : Abstract {
data.Add(typeof(Concrete), instanceOfType);
}
}
【问题讨论】:
-
是否意味着每种类型都有一个单例?
-
可以有多个 typedList 实例,其中包含同一类的不同实例。所以它不会是每个 VM 一个类一个,不。
-
在更新版本中,您应该使用
typeof(Concrete),而不是typeof(Abstract)。另请注意,以T开头的类型参数是一种常见的约定。
标签: c# collections strong-typing