4

IDictionary インターフェイスの必要性は何ですか。IDictionary インターフェイスを初期化する方法を教えてください。結局のところ、それは単なるインターフェースです。次のコード スニペットは msdn からのものです。理解できませんでした。

IDictionary<string, string> openWith = new Dictionary<string, string>();
4

5 に答える 5

11

Dictionary が実装する必要がある重要な機能を定義します。

MSDN の行は、 IDictionaryインターフェイスで定義された関数 (メソッド) を実装するオブジェクトopenWithを作成していることを意味します。

Dictionary を使用して次のように変数を宣言する場合:

Dictionary<string,string> openWith=.....;

あなたは具体的なタイプのオブジェクトに縛られています。でも使うときは

IDictionary<string,string> openWith=....;

IDictionary インターフェイスを実装する任意のオブジェクト、おそらく独自のカスタム クラスで使用できます :)

于 2009-05-22T06:42:08.287 に答える
9

インターフェースの全体的なポイントは、モジュールへのインターフェースを提供することです (ここでは広い意味で「モジュール」を使用します)。これにより、呼び出し元のコードは、この特定のインターフェースがどのように実装されているかを心配する必要がなくなります。

「インターフェースを初期化する方法IDictionary」に関しては、これは技術的に正しくありません。初期化できるのは変数で、その型はIDictionary<T, V>です。確かに、変数を初期化する必要がありますが、それは通常、「クライアント コード」から隠されています。

IDictionaryただし、あまり代表的ではありません。むしろ、IDataReaderインターフェースを検討してください。あなたは確かに ADO.NET を扱ったことがあるので、これはおなじみのはずです。

public Foo PopulateFromDataReader(SqlDataReader dataReader)

この特定のメソッドは と密接に結合されているSqlDataReaderため、Access、Oracle、MySQL、Firebird などをサポートするように書き直す必要があります。つまり、実装に依存します。

今考えてみましょう:

public Foo PopulateFromDataReader(IDataReader dataReader)

このメソッドは、 を実装する任意のクラスで使用できますIDataReader。つまり、基本的には、ADO.NET 互換のデータ プロバイダーで使用できます。

于 2009-05-22T06:44:11.700 に答える
5

他のインターフェースと何ら変わりはありません。もっと簡単な例を考えてみてください:

interface IThermometer
{
    double CurrentTemperature { get; }
}

これで温度を取得する方法ができましたが、正確にどのように測定されたかは気にしません。さまざまな実装を作成できます。

class MercuryThermometer : IThermometer
{
    public double CurrentTemperature
    {
        get { return ... /* gets the temperature somehow */ }
    }
}

プログラムの残りの部分では、使用している温度計を知る必要はありません。

于 2009-05-22T06:46:32.227 に答える
1

IDictionary<,>as (インターフェイス)として型指定された変数と (no ; 具体的な型にDictionary<,>注意) として初期化された値 (参照)の違いを見落としているだけだと思います。I

于 2009-05-22T07:46:48.237 に答える