2011-01-06 14 views
6

DictionaryBaseとgeneric Dictionary<TKey, TValue>の違いを教えてもらえますか?ただし、DictionaryBaseは抽象クラスです!どちらも厳密に型指定されていますが、一般的なクラスはパフォーマンスの非ジェネリッククラスよりも優れているので、DictionaryBaseの正確な使用法は何ですか? 両方のクラスはほぼ同じです!DictionaryBaseとDictionaryの違い

ヘルプの任意の種類は、非ジェネリックコレクション型は、.NETフレームワークに残っている理由は、後方互換性のために大部分がある

おかげ

答えて

3

Dictionarybaseは非汎用IDictionaryインターフェイスを実装する基本クラスであり、Dictionaryは汎用IDictionaryインターフェイスを実装する辞書の汎用バージョンです。ジェネリック医薬品の使用は非ジェネリック医薬品よりも好ましい。あなたは ベースのコレクション型から派生し、型固有の実装しなくても、型の安全性の直接的な利益を 得るため

私は、ジェネリックコレクションを使用して When to use generics?

が一般的に推奨され、これは、より参考になると思いますメンバー。一般的な コレクション型は、コレクション要素 が値型である場合、対応する 非持続型コレクション型よりも一般的に優れています(ノンネリックベースコレクション型から に派生した型よりも優れています)。 要素。

またIntroduction to Generics

ジェネリッククラスとメソッドは、再利用性、型の安全性とその非ジェネリック対応ができないという方法で 効率を組み合わせ、通過。 ジェネリックスは、コレクションとそれを操作するメソッド で最も頻繁に使用されます。バージョン2.0の.NET Frameworkクラスライブラリ には、新しい名前空間System.Collections.Genericが用意されています。この名前空間には、 の新しい汎用ベースのコレクションクラスが含まれています。 .NET Framework 2.0を対象とし、以降の代わりに、古い非ジェネリック 対応

+0

両方のクラスは強く型付けされている..また、インターフェイスから派生しています。 DictionaryBaseを除いてSystem.Collectionsのすべてのクラスは、型固有のものではないと思います!!したがって、異なるインタフェースから派生した違いだけがあり、DictionaryBaseは抽象クラスです。 – Batrickparry

+0

非ジェネリッククラスのジェネリッククラスの対応は、廃止されるべきではありません!!!!! – Batrickparry

+0

一般的なIDictionaryは、非汎用IDictionaryの汎用バージョンです。ジェネリックはタイプの安全性と効率を促進します。 –

5

をいただければ幸いです。一般的には、できる限り、ジェネリックコレクションタイプを使用する必要があります。

+1

汎用辞書があるため、DictionaryBaseは実際には使用されません。 – Batrickparry

+0

効果的です。 –

+0

ありがとうアダム.. :) – Batrickparry

0

の 新しいジェネリックコレクションクラスを使用する すべてのアプリケーションは、私はちょうどにIXmlSerializableた古いDictionaryBaseクラスを変換終了することをお勧めします一般Dictionary(string, string)

最も痛い違いは、Dictionary<string, string>の場合、存在しないキーに対してthis[key]を呼び出すと、キーが存在しないという例外が表示されます。

DictionaryBase私は戻ってnullを返します。これは私のケースでは苦痛でした。システムがキー値を取得する前に辞書ContainsKeyをチェックしていないコードでいっぱいだったからです。私はシリアル化で何かを混乱させたと仮定して、私にはもっと苦痛を与えられました。