C#/IDisposableへのwrapping の履歴(No.1)
更新必ず後処理の必要なクラスが IDisposable を実装していない?!†
やまねこ@楢ノ木技研 さんからのお題で、表記のような状況を解決する方法を考えてみました。
IDisposable に wrap するためのライブラリ†
こんなのが思い浮かびました。
どうでしょうね。
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()) { } }
コメント†
Counter: 6119 (from 2010/06/03),
today: 3,
yesterday: 1