1. ホーム
  2. c#

[解決済み] スタイルの違い IDictionaryとDictionaryの違い

2023-07-02 13:47:27

質問

私の友人に、長年Javaで開発してきた後、.NET開発に参入したばかりの人がいます。彼のコードをいくつか見てみたところ、次のようなことをよくやっていることに気づきました。

IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

辞書をクラスではなくインターフェイスとして宣言しているのです。一般的には次のようにします。

Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

IDictionaryインターフェイスは必要なときだけ使う(例えば、IDictionaryインターフェイスを受け付けるメソッドに辞書を渡すとか)。

私の質問は、彼のやり方にメリットはあるのでしょうか?これは Java で一般的なプラクティスなのでしょうか。

どのように解決するのですか?

IDictionary が Dictionary よりも汎用的な型である場合、変数を宣言する際により汎用的な型を使用することは理にかなっています。そうすれば、変数に割り当てられた実装クラスについてそれほど気にする必要はありませんし、将来、後続の多くのコードを変更することなく、簡単に型を変更することができます。例えば、Javaではしばしば、以下のようにするのが良いとされています。

List<Integer> intList=new LinkedList<Integer>();

するよりも

LinkedList<Integer> intList=new LinkedList<Integer>();

こうすることで、以下のすべてのコードがリストをLinkedListではなくListとして扱い、将来的にLinkedListをVectorやListを実装する他のクラスと簡単に交換できるようになると確信しています。私は、これはJavaと一般的な良いプログラミングに共通していると思います。