是否有类似泛型类的基类?
我想要这样的东西
public class MyCollection<T> where T : MyBaseObject
{
void Add(MyBaseObject obj)
{
/* cast to T and insert */
}
int Count
{
get
{
/* count something */
}
}
}
public class MyCollectionCollection
{
Dictionary<Type, MyCollection> collections = new Dictionary<Type, MyCollection>();
Add(MyBaseObject obj)
{
collections[obj.GetType()].Add(obj);
}
}
MyCollectionCollection
包含MyBaseObject
的(已知)子类,它们存储在特定于类型的集合中。
Dictionary<Type, MyCollection>
无效。我必须定义一个接口IMyCollection
。但是,我必须将每个方法都放入MyCollection<T>
并进入IMyCollection
,这似乎有点多余。而且我必须编写一个getter / setter来替换MyCollection<T>.Count
之类的字段,这些字段似乎很臃肿。
修改
public void Add(T obj)
中的MyCollection<T>
是我的第一次尝试,但我不知道如何在MyCollectionCollection
中使用它。 Dictionary<Type, MyCollection> collections
无效(CS0305)。我需要一个所有MyCollection<T>
的基类,它有Add(T element)
。
答案 0 :(得分:1)
如果你有这个:
public class MyCollection<T> where T : MyBaseObject
{
public void Add(MyBaseObject obj)
{
/* cast to T and insert */
}
}
然后我有了这个:
public class ConcreteA : MyBaseObject
{
}
public class ConcreteB : MyBaseObject
{
}
我可以写这段代码:
var myCollection = new MyCollection<ConcreteA>();
var b = new ConcreteB();
myCollection.Add(b);
明显不符合/* cast to T and insert */
要求。
如果你这样实现它就可以了:
public class MyCollection<T> where T : MyBaseObject
{
public void Add(T obj)
{
/* no need to cast to T, just insert */
}
}