C#/IDisposableへのwrapping のバックアップ差分(No.1)
更新- 追加された行はこの色です。
- 削除された行はこの色です。
[[公開メモ]] * 必ず後処理の必要なクラスが IDisposable を実装していない?! [#ke4bae90] やまねこ@楢ノ木技研 さんからのお題で、表記のような状況を解決する方法を考えてみました。 * IDisposable に wrap するためのライブラリ [#bd853fd5] こんなのが思い浮かびました。 どうでしょうね。 LANGUAGE:C# // Dispose 時に Close() したいのに IDisposable を継承してないクラスがいくつかある class ToBeClosed1 { public void Close() { MessageBox.Show("Closed!"); } } class ToBeClosed2 { public void Close() { MessageBox.Show("Closed!"); } } // using を使えるようにする wrapper class DisposableWrapper: IDisposable { Action action; protected DisposableWrapper(Action action) { this.action = action; } public void Dispose() { action.Invoke(); } public implicit operator DisposableWrapper(ToBeClosed1 tbc1) { return new DisposableWrapper(() => tbc1.Close()); } public implicit operator DisposableWrapper(ToBeClosed2 tbc2) { return new DisposableWrapper(() => tbc2.Close()); } } // こうやって使う? private void button1_Click(object sender, EventArgs e) { using ((DisposableWrapper)new ToBeClosed1()) { } using ((DisposableWrapper)new ToBeClosed2()) { } } * コメント [#q810f856] #article_kcaptcha
Counter: 5649 (from 2010/06/03),
today: 1,
yesterday: 2