[解決済み] スタイルの違い 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と一般的な良いプログラミングに共通していると思います。
関連
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み] SelectとSelectManyの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】WebResource.axdとは何ですか?