0

IDisposableを実装するクラスがあります

public class Foo: IDisposable {
    public void Dispose() {
        // do the disposing
    }
}

次に、次の方法でクラスを使用するメソッドがあります。

void Bar() {
    using (var f = new Foo()) {
       // do whatever
    }  
}

コードがusing{...}境界を離れると、FooクラスのDisposeメソッドが呼び出されます。Disposeメソッドで、コードがブロックを使用して自発的に終了するのか、例外の結果として終了するのかをどのように検出できますか?

4

2 に答える 2

1

私の知る限りでは、あなたはできません。Foo「body」をラップしてラムダとして実行するメソッドに変更することを検討してください。

Foo(f => {
    // do whatever
});

次に、の実装はFoo、呼び出しをラップしてtry/catch例外を検出し、実行したいことをすべて実行できます(その後、を使用して再スローしthrow;ます)。

于 2009-11-13T00:46:09.493 に答える
0

あなたはそれをするべきではありません-そして私はそれをする方法を想像することはできません。

実装の主なアイデアはIDisposable、オブジェクトを破棄するときにリソースが解放されるようにすることです。

ここで、構成の主なアイデアは、usingその後、オブジェクトによって使用されるすべてのリソースが解放されるようにすることです。

したがって、この操作を実行するためにオブジェクトが破棄されている理由に依存しないでください。その場合は、デザインを確認する必要があります。

于 2009-11-13T00:49:38.747 に答える