|
2009/04/13(Mon) 15:17:00 編集(投稿者)
どうもお返事ありがとうございます。
>>ところでList<>って継承しちゃだめだったんですねー知りませんでした。 > > 理由も調べました?
パフォーマンスがおちるので、virtual宣言されてないとかなんとか。 MSDNのリンク先は英語でわかりませんでした>< > 別名を付けたいだけなら、派生でも問題ないはずです。 > 「そうした方が良い」とは思いませんが。
あ、なるほど、了解しました。
>>後、スレチになりますが、List()は各要素の削除時に >>Dispose()メソッドなんて呼んでくれませんよね? > > 呼ばないです。 > 「コレクションから要素を削除した」からと言って、その時常に IDisposable.Dispose() を呼び出すべきであるとは言い切れません。
考えてみたらそれはそうですね。中のオブジェクト他で参照しているかもしれませんから^^;
> コレクションそのものが IDisposable インターフェースを実装しているなら、そのコレクションの IDisposable.Dispose() 呼び出し時に各要素の IDisposable.Dispose() を呼び出すような実装は「あり」だと思いますが。
なるほどありがとうございます。これもケースバイケースの実装になりそうですね。 List()で実装して、Removeする前にDisposeするか、Collection()のRemoveなどをオーバーライドしてDisposeを実装するか−、うわー、なやましー List()で要素を解放するときに強制的にDisposeを読んでくれるクラスをジェネリクスで自分でつくるかな。
public class DisposeList<T> : Collection<T>, IDisposable where T:IDisposable
こうかな。
でも、List()の方がメソッドが充実してますね。 どっちつかうかなやむなっと。
|