黒龍's Blog

明日から役立つ無駄知識をあなたに(仮)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  170  : 記事  0  : コメント  2719  : トラックバック  26

ニュース

わんくま同盟に参加させていただきました。
どうぞよろしくお願いします。

自己紹介

コミュニティ

  • わんくま同盟
    わんくま同盟

書庫

(ネタ元は同僚)

例えば Ping のような

public class Ping:Component,IDisposable { }

なクラスで

Ping p = new Ping(); p.Dispose();

するとIDisposableのDisposeは呼ばれずにComponent側が呼ばれます。
Pingの場合はIDisposable側が本命のようでoverideではなく明示的な実装になってます。それでめでたくリークすると。

どなたか理由ご存知ですか?

投稿日時 : 2008年5月13日 18:22

コメント

# re: Component が IDisposable でないのはなぜ? 2008/05/13 20:05 中博俊
p.Dispose()と呼ぶことを想定していないからじゃないでしょうか。
IDisposable全般そうですが。

# re: Component が IDisposable でないのはなぜ? 2008/05/13 20:08 黒龍
(hogehoge as IDisposable).Dispose()ってことか。
using(hogehoge = new hogehoge())
なら大丈夫なんですけどね~。

# re: Component が IDisposable でないのはなぜ? 2008/05/15 17:36 中博俊
そう。usingもisモデルでやっているので、あわせておいたほうがいいと

# re: Component が IDisposable でないのはなぜ? 2008/05/15 18:13 黒龍
ComponentがIDisposableを実装してりゃ丸く収まるのになぁ。こういうルール(isモデル)って忘れがちで危ないからやです。

Post Feedback

タイトル
名前
Url:
コメント