Hashtable から派生クラスを作成するにはどうすればよいですか? オブジェクトを追加することはできますが、削除または置換することはできません。
何をオーバーライドする必要があり、特に [] 演算子をオーバーライドするにはどうすればよいですか?
Hashtable から派生クラスを作成するにはどうすればよいですか? オブジェクトを追加することはできますが、削除または置換することはできません。
何をオーバーライドする必要があり、特に [] 演算子をオーバーライドするにはどうすればよいですか?
この場合、ディクショナリ (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();
}
}
少なくとも、、、プロパティClear
、およびインデクサーをオーバーライドする必要があります。次の構文を使用して、インデクサーをオーバーライドできます。Remove
Values
Item
Item
public override this[object key] {
get { // get implementation }
set { // set implementation }
}
Clear
ユーザーがハッシュテーブルをクリアできないようにオーバーライドする必要があります。Remove
ユーザーがハッシュテーブルから全体を削除できないようにオーバーライドする必要があります。Values
ユーザーICollection
は返された を使用してハッシュテーブルの値を変更できるため、オーバーライドする必要があります。Item
同様の理由でオーバーライドする必要があります。