我如何从Dictionary继承?

时间:2009-10-20 14:27:23

标签: c# inheritance collections

我想要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){}

}

重载父类的构造函数和方法的正确方法是什么?

注意:我认为我滥用了“过载”一词,请更正或建议更正。

3 个答案:

答案 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();