[解決済み] IListを使用する場合とListを使用する場合について
2022-04-19 11:51:52
質問
IListがインターフェース、Listが具象型であることは分かっているのですが、それぞれをどのようなタイミングで使用すればよいのかがまだ分かりません。今やっているのは、SortやFindAllメソッドが必要なければ、インターフェイスを使うということです。これでいいのでしょうか?インターフェースと具象型を使うタイミングを決める良い方法はないでしょうか?
どのように解決するのですか?
私が守っているルールは2つあります。
- 動作する最も基本的なタイプを受け入れる
- ユーザーが必要とする最も豊富な種類を返す
ですから、コレクションを受け取る関数やメソッドを書くときは、Listではなく、IList<T>, ICollection<T>, IEnumerable<T> を受け取るように書いてください。 System.ObjectもTになるので、異種のリストであっても汎用インタフェースは機能します。 このようにしておくと、将来Stackや他のデータ構造を使うことになったときに、頭痛の種を減らすことができます。 もし、関数内で行う必要があるのがforeachだけなら、IEnumerable<T>が本当に求めるべき全てです。
一方、関数からオブジェクトを返す場合、ユーザーがキャストしまくることなく、可能な限り豊富な操作を提供したいものです。 だからその場合、内部でList<T>であれば、そのコピーをList<T>として返すようにします。
関連
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] List<T> または IList<T> [終了しました]。
-
[解決済み] なぜ配列はIListを実装しているのか?