C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[18]: 「typedef」について [1]


(過去ログ 61 を表示中)

[トピック内 22 記事 (21 - 22 表示)]  << 0 | 1 >>

■34880 / inTopicNo.21)  Re[17]: 「typedef」について
  
□投稿者/ 渋木宏明(ひどり) (1111回)-(2009/04/13(Mon) 12:26:59)
渋木宏明(ひどり) さんの Web サイト
> ところでList<>って継承しちゃだめだったんですねー知りませんでした。

理由も調べました?

別名を付けたいだけなら、派生でも問題ないはずです。
「そうした方が良い」とは思いませんが。

> 後、スレチになりますが、List()は各要素の削除時に
> Dispose()メソッドなんて呼んでくれませんよね?

呼ばないです。
「コレクションから要素を削除した」からと言って、その時常に IDisposable.Dispose() を呼び出すべきであるとは言い切れません。

コレクションそのものが IDisposable インターフェースを実装しているなら、そのコレクションの IDisposable.Dispose() 呼び出し時に各要素の IDisposable.Dispose() を呼び出すような実装は「あり」だと思いますが。
引用返信 編集キー/
■34882 / inTopicNo.22)  Re[18]: 「typedef」について
□投稿者/ 倉田 有大 (550回)-(2009/04/13(Mon) 12:43:21)
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()の方がメソッドが充実してますね。
どっちつかうかなやむなっと。
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -