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