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: 6655 (from 2010/06/03),
today: 1,
yesterday: 3