我想要Dictionary<TKey,TValue>
的所有功能,但我希望它为Foo<TKey,TValue>
。
我应该怎么做?
目前我正在使用
class Foo<TKey,TValue> : Dictionary<TKey, TValue>
{
/*
I'm getting all sorts of errors because I don't know how to
overload the constructors of the parent class.
*/
// overloaded methods and constructors goes here.
Foo<TKey,TValue>():base(){}
Foo<TKey,TValue>(int capacity):base(capacity){}
}
重载父类的构造函数和方法的正确方法是什么?
注意:我认为我滥用了“过载”一词,请更正或建议更正。
答案 0 :(得分:24)
你很接近,你只需要从构造函数中删除类型参数。
class Foo<TKey,TValue> : Dictionary<TKey, TValue>
{
Foo():base(){}
Foo(int capacity):base(capacity){}
}
要覆盖方法,您可以使用override关键字。
答案 1 :(得分:17)
不直接回答你的问题,只是一个建议。我不会继承字典,我会实现IDictionary<T,K>
并聚合一个字典。这很可能是一个更好的解决方案:
class Foo<TKey,TValue> : IDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> myDict;
// ...
}
答案 2 :(得分:2)
如果您只想要相同类型但名称不同,可以使用using
别名来缩短它:
using Foo = System.Collections.Generic.Dictionary<string, string>;
然后
Foo f = new Foo();