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为将“主体”包装并作为 lambda 执行的方法:

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

然后,您的实现Foo可以将调用包装到try/catch以检测异常并执行您想做的任何事情(然后使用 重新抛出throw;)。

于 2009-11-13T00:46:09.493 回答
0

你不应该那样做——而且我想不出有办法做到这一点。

实现的主要思想IDisposable是确保在销毁对象时释放资源。

现在,构造的主要思想using是确保在它之后,对象使用的所有资源都被释放。

因此,您不应依赖于为什么要处置对象来执行此操作。如果你这样做,你应该检查你的设计。

于 2009-11-13T00:49:38.747 回答