C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

--/--/-- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
タグ:
トラックバック(-) | コメント(-) | このエントリーを含むはてなブックマーク
2008/07/06 22:47
フィールド、プロパティ、メソッドの戻り値・パラメータには List<T> を (原則) 使用しない方がいいかもしれない。
代わりに IEnumerable<T>、IList<T>、ICollection<T>、Collection<T> のいずれかを使う。


[ 理由 1 ]
List<T> はパフォーマンス向上のために使用するコレクションで、継承は想定されていない。一方、Collection<T> は、継承して独自のコレクションを定義することが可能な (想定されている) コレクション。
このため、外部に公開するプロパティや外部に公開するメソッドの戻り値・パラメータで List<T> を使用することは推奨されていない
僕は 「List<T> は多態性を持てないから」 と勝手に解釈している。


[ 理由 2 ]
Collection<T> は、IList<T> を受け取るバージョンのコンストラクタを使用することで、コレクションのラッパーとして機能させることができる。すると、Collection<T> 型のフィールドには、仮想プロキシによるレイジーロードなど、別のコレクションを注入することができる。
# List<T> では、IEnumerable<T> を受け取るコンストラクタがあるが、これはコンストラクタ内で要素のコピーを行っており、ラッパーとしては働かない。


[ 注意点 ]
ひとつ気をつけなければならない点として、List<T> は独自の機能を豊富に提供していることが挙げられる。例えば Collection<T> のインスタンスで List<T> の機能を使いたい時は、List<T> に変換する (IEnumerable<T> を受け取るコンストラクタを使う) などしなければならない。
タグ: .NET C#


v-218
そういうことだったのですね。ありがとうございました。

2008.11.12 17:59 URL | baba #- [ 編集 ]












トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/224-a2fd096e

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。