3

インターフェイスを公開するオブジェクトを作成する必要がありますIDictionary<K,V>が、インターフェイスの実装全体を埋めたくありません。

Java の AbstractDictionary に相当するものがあると便利です。これにより、完全な辞書 (Java では HashMap) を実行する必要がほとんどなくなります。

  • コレクションを反復処理する必要がない場合、実装するメソッドは 1 つ (TryGetValue) です。
  • 書き込み可能にしたい場合は、別のエントリ (追加) を実装します。
4

3 に答える 3

4

WintellectのPowerCollectionsライブラリには、標準のIDictionary <K、V>インターフェイスのほとんどを実装するDictionaryBaseクラス(ソースコード)が含まれています。クラスのドキュメントコメントから:

DictionaryBaseは、ジェネリックIDictionary<T>および非ジェネリックIDictionaryインターフェースをより簡単に実装するために使用できる基本クラスです。

DictionaryBaseを基本クラスとして使用するには、派生クラスがCount、GetEnumerator、TryGetValue、Clear、Remove、およびインデクサーセットアクセサーをオーバーライドする必要があります。

于 2008-12-04T08:00:15.450 に答える
3

System.Collections.Generic名前空間には、 、 、およびの 3 つの実装が含まれていIDictionary<K,V>ます。Dictionary<TKey, TValue>SortedDictionary<TKey, TValue>SortedList<TKey, TValue>

于 2008-12-04T07:09:45.363 に答える
0

独自のディクショナリクラスを構築している場合は、System.Collections.ObjectModel.KeyedCollectionから継承します。

APIデザインを理解していないすべての人のために編集してください。

パブリックプロパティまたは関数からジェネリックリストまたはディクショナリを返すことは絶対にしないでください。インシードでは、その目的のために特別に構築されたクラスを返却する必要があります。このようにして、後で機能を追加できます。

Dictionay<integer, Order> Orders() {get;}
CustomerOrders Orders() {get;}

2番目のバージョンでは、Totalプロパティを追加して、ユーザーに実際に見つけてもらうなどのことができます。

理論的には、Totalプロパティを追加するDictionaryのサブクラスを返すことができますが、その場合、ユーザーはA.実行していることを認識し、B。プロパティに到達するためのキャストを含める必要があります。

于 2008-12-04T07:52:51.080 に答える