константа не может использоваться для классов или структур (за исключением строковых констант и пустого указателя, как г-н Skeet указал), только для типов значения, и получены доступ как статические поля. Значение константы установлено во время компиляции и должно быть установлено, когда оно объявляется.
только для чтения может использоваться для чего-либо кроме перечислений и может быть или статическое или поле экземпляра. Значение readonly установлено во времени выполнения и может быть установлено по-другому, в зависимости от которого вызывают конструктора.
Вот хорошая страница для обзора константы, и статических ключевых слов только для чтения.
Вы были близки, вам просто нужно удалить параметры типа из конструкторов.
class Foo<TKey,TValue> : Dictionary<TKey, TValue>
{
Foo():base(){}
Foo(int capacity):base(capacity){}
}
Чтобы переопределить метод, вы можете использовать ключевое слово override.
Not directly answering your question, just an advice. I would not inherit the dictionary, I would implement IDictionary
and aggregate a Dictionary. It is most probably a better solution:
class Foo<TKey,TValue> : IDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> myDict;
// ...
}