如何从Hashtable创建派生类,可以添加对象但不能删除或替换?
我必须覆盖什么,特别是如何覆盖[]运算符?
答案 0 :(得分:5)
不应该从Dictionary(你应该使用而不是HashTable)派生,你可能应该在这种情况下封装它。
“词典”有很多方法可以更改集合,更容易使其成为私有成员,然后只需实现添加和访问项目的方法。
类似的东西:
public class StickyDictionary<Key, Value> : IEnumerable<KeyValuePair<Key, Value>>{
private Dictionary<Key, Value> _colleciton;
public StickyDictionary() {
_collection = new Dictionary<Key, Value>();
}
public void Add(Key key, Value value) {
_collection.Add(key, value);
}
public Value this[Key key] {
get {
return _collection[key];
}
}
public IEnumerable<KeyValuePair<Key, Value>> GetEnumerator() {
return _collection.GetEnumerator();
}
}
答案 1 :(得分:3)
至少应覆盖Clear
,Remove
,属性Values
和索引器Item
。您可以使用以下语法覆盖索引器Item
:
public override this[object key] {
get { // get implementation }
set { // set implementation }
}
您需要覆盖Clear
,以便用户无法清除哈希表。您需要覆盖Remove
,以便用户无法从哈希表中删除entires。您需要覆盖Values
,因为用户可以使用返回的ICollection
来修改哈希表中的值。您出于类似原因需要覆盖Item
。