IDictionary インターフェイスの必要性は何ですか。IDictionary インターフェイスを初期化する方法を教えてください。結局のところ、それは単なるインターフェースです。次のコード スニペットは msdn からのものです。理解できませんでした。
IDictionary<string, string> openWith = new Dictionary<string, string>();
IDictionary インターフェイスの必要性は何ですか。IDictionary インターフェイスを初期化する方法を教えてください。結局のところ、それは単なるインターフェースです。次のコード スニペットは msdn からのものです。理解できませんでした。
IDictionary<string, string> openWith = new Dictionary<string, string>();
Dictionary が実装する必要がある重要な機能を定義します。
MSDN の行は、 IDictionaryインターフェイスで定義された関数 (メソッド) を実装するオブジェクトopenWithを作成していることを意味します。
Dictionary を使用して次のように変数を宣言する場合:
Dictionary<string,string> openWith=.....;
あなたは具体的なタイプのオブジェクトに縛られています。でも使うときは
IDictionary<string,string> openWith=....;
IDictionary インターフェイスを実装する任意のオブジェクト、おそらく独自のカスタム クラスで使用できます :)
インターフェースの全体的なポイントは、モジュールへのインターフェースを提供することです (ここでは広い意味で「モジュール」を使用します)。これにより、呼び出し元のコードは、この特定のインターフェースがどのように実装されているかを心配する必要がなくなります。
「インターフェースを初期化する方法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 互換のデータ プロバイダーで使用できます。
他のインターフェースと何ら変わりはありません。もっと簡単な例を考えてみてください:
interface IThermometer
{
double CurrentTemperature { get; }
}
これで温度を取得する方法ができましたが、正確にどのように測定されたかは気にしません。さまざまな実装を作成できます。
class MercuryThermometer : IThermometer
{
public double CurrentTemperature
{
get { return ... /* gets the temperature somehow */ }
}
}
プログラムの残りの部分では、使用している温度計を知る必要はありません。
IDictionary<,>
as (インターフェイス)として型指定された変数と (no ; 具体的な型にDictionary<,>
注意) として初期化された値 (参照)の違いを見落としているだけだと思います。I