1. ホーム
  2. c#

[解決済み] 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>として返すようにします。