2012-01-24 13 views
-1

オブジェクト:
C# - List<T> or IList<T>違いは、可能性の重複性質

私はコードレビューをしています。

publicプロパティがIListのコードが見つかりました。常にリストに設定されています。

私はプロパティをListとして定義するだけです。

2つの間に実用的な違いはありますか?

+0

http://stackoverflow.com/questions/400135/c-sharp-listt-or-ilistt – remarkrm

答えて

5

具体的な種類ではなくインターフェイスを公開することが有効です。インターフェイスはコードメンテナンスに関して常に抽象的で柔軟性があり、クライアントとの契約を破ることなく実装をアップグレードできます。

2

はい - たとえば、IListインターフェイスを実装する他のコレクションタイプを介してそのプロパティを実装する場合は、パブリックインターフェイスを変更する必要はありません。 IList<T>としてそれを定義する

7

(クラスとは対照的に、インターフェース、List<T>)は変更する必要が任意の呼び出しコードなしで、必要に応じて、同じインタフェースを実装する別のクラスを自由に使用するクラスの実装を残します。

一般的な考え方では、クラスによってプロパティがリストのように動作するオブジェクトを取得すると言われていますが、必要に応じて内部的に実装できます。

3

はい、IListはインターフェイスで、Listはクラスです。

プロパティがインターフェイスとして宣言されている場合、プロパティのコンシューマは、実装ではなく合意されたインターフェイスのみに依存するプロパティを消費できます。簡単に言えば、これにより、実際のタイプのプロパティを、それを使用するコードを壊さずに、より簡単に変更することができます。

2

はい、インターフェイスを使用する場合は、基本的なコレクションの実装とは独立しています。これは、インターフェイスIListを実装する任意のコレクションです。

2

コードを書いた人は誰でも正しいです。 Listの使用は実装の詳細であり、すべてのパブリックプロパティはインターフェイスを公開することをお勧めします。

2

IList<T>は、List<T>だけでなく、Arrayでも実装されている汎用インターフェイスです。

このようにプロパティの戻り値の型を定義することにより、の実数型からの戻り値の型にアクセスする一般的な方法が得られます。

1

IListはインターフェイスです。リストは具体的なクラスです。将来、IListで定義されたメソッドを実装する新しいクラスを記述することができ、そのプロパティをその新しいクラスに設定することができます。このようにIListは現時点では現れていなくても、より柔軟性を提供します。

1

IList<T>インターフェイスは、ICollectionおよびIEnumerableインデックス要素の追加、削除、内容の確認、反復スルー、および(ICollectionおよびIEnumerableではなくIListに固有の)非常に基本的な動作を定義します。

これは、リストの定義された動作の合計ではありません。上記のすべてに加えて、リストをソートすることはできますが、IListは使用できません。さらに高度な検索を実行したり、リストの読み取り専用の品質を操作したり、すべての場合にチェックするなどの述部ベースの操作を実行できますリスト内の要素が条件を真にするなど

依存関係を「疎結合」するのが一般的には良い方法であるため、IListが使用されます。 IListが必要な場合は、そのインタフェースを実装するクラスのインスタンスが必要です。 System.Collections.Generic.Listである必要はありません。具象としてのクラスを定義する、またはすべてのIListsも同様IEnumerablesているので、あなたはあなたが具体的なリストで行うことができます実質的にすべてを取得しますLINQのライブラリにプラグインすることができます:あなたはソート機能が必要な場合は、2つのいずれかを行うことができます(ただしやや遅くなります)。

さらに、一部のORMやその他のライブラリでは、持続可能なクラスまたはその他の操作可能なクラスのサブアイテムのコレクションをIListにする必要があるため、ライブラリは独自の特殊なIList実装(レイジーローディング、動的コレクション)。

関連する問題