0

コレクションと ICollection をテストするためのダミー プロジェクトを作成しました。ユーザー クラスがあり、コレクションを作成したいと考えていました。例 -

ICollection<User> users = new Collection<User>();
Collection<User> users = new Collection<User>();

コレクションを使用するかコレクションを使用するかに関係なく、両方のコードが正常に機能しています。上の2行の違いは何ですか?

前もって感謝します。

4

4 に答える 4

3

1 行目ICollection<User> users = new Collection<User>();は、ICollection インターフェイスを実装するオブジェクト (コレクション) へのCollection<User> users = new Collection<User>();参照を作成します。2 行目は、T = User である Collection クラスの具体的な実装であるオブジェクトへの参照を作成します。

使用法では、後続のコードが処理するコレクションのタイプに依存しない必要がある ICollection 参照を使用するように見えます。つまり、ICollection を実装する任意のオブジェクトを提供でき、コードは引き続き機能します。コードが密結合されていない場合に最適です (もちろん、これは私たち全員が望んでいます)。

Collection を参照として使用すると、処理コードが ICollection の特定の実装である Collection クラスに緊密に結合されます。インターフェイスで定義されたメソッドのみを使用することもできますが、クラスの特定の機能を使用することもできます。コレクションオブジェクトを別のものに簡単に置き換えることができます。これには十分な理由がありますが、ここでの回答の範囲を少し超えています。ここで依存性注入と制御の反転を検索してください。背景情報がたくさん見つかると確信しています。

于 2010-10-21T11:47:05.757 に答える
2

ICollection はインターフェイスです。Collection は ICollection を実装しているため、機能します。ICollection はクラスではないため、これは機能しません。

ICollection<User> users = new ICollection<User>();

..インターフェイスをインスタンス化できないためです。インターフェイスは、クラスが実装する必要があるものを説明するだけです。

于 2010-10-21T11:35:59.330 に答える
2

Collection<T>の単なる実装ですICollection<T>。誰かが from を実装する別のクラスを作成した場合ICollection<T>、最初の行を次のように置き換えることで、そのクラスを簡単に使用できます。

ICollection<User> users = new MyCustomCollectionCollection<User>();

コードの後半では、同じインターフェイスが引き続き使用されるため、何も修正する必要はありません。

于 2010-10-21T11:36:22.683 に答える
0

参考になるのでusers。両方のサンプルで、同じオブジェクトを指しています。動作はオブジェクトのクラスによって定義され、同じです。

于 2010-10-21T11:36:04.383 に答える