1

Hashtable から派生クラスを作成するにはどうすればよいですか? オブジェクトを追加することはできますが、削除または置換することはできません。

何をオーバーライドする必要があり、特に [] 演算子をオーバーライドするにはどうすればよいですか?

4

2 に答える 2

5

この場合、ディクショナリ (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();
   }

}
于 2009-10-19T16:33:45.587 に答える
3

少なくとも、、、プロパティClear、およびインデクサーをオーバーライドする必要があります。次の構文を使用して、インデクサーをオーバーライドできます。RemoveValuesItemItem

public override this[object key] {
    get { // get implementation }
    set { // set implementation }
}

Clearユーザーがハッシュテーブルをクリアできないようにオーバーライドする必要があります。Removeユーザーがハッシュテーブルから全体を削除できないようにオーバーライドする必要があります。ValuesユーザーICollectionは返された を使用してハッシュテーブルの値を変更できるため、オーバーライドする必要があります。Item同様の理由でオーバーライドする必要があります。

于 2009-10-19T16:27:59.987 に答える