相关疑难解决方法(0)

我不太了解使用/ Disposable对象的工作原理

我问了一个关于从函数中返回一个Disposable(IDisposable)对象的问题,但是如果我在那里提出这个问题,我认为我会讨论这个问题.

我创建了一些示例代码:

class UsingTest
{
    public class Disposable : IDisposable
    {
        public void Dispose()
        {
            var i = 0;
            i++;
        }
    }
    public static Disposable GetDisposable(bool error)
    {
        var obj = new Disposable();
        if (error)
            throw new Exception("Error!");
        return obj;
    }
}
Run Code Online (Sandbox Code Playgroud)

我故意用这种方式编码,因为我打电话给:

using (var tmp = UsingTest.GetDisposable(true)) { }
Run Code Online (Sandbox Code Playgroud)

使用调试器,我注意到该Dispose方法永远不会执行,即使我们已经实例化了一个Disposable对象.如果我正确地理解了这个目的Dispose,如果这个类实际上已经打开了句柄之类的东西,那么我们一旦完成它们就不会关闭它们.

我问这个问题是因为这种行为符合我的期望,但在相关问题的答案中,人们似乎表明using会照顾一切.

如果using仍然以某种方式处理所有这些,有人可以解释我错过了什么?但是,如果这段代码确实会导致资源泄漏,你会如何建议我编写代码GetDisposable(条件是我必须实例化IDisposable对象并运行可能在return语句之前抛出异常的代码)?

c# idisposable using-statement

6
推荐指数
2
解决办法
854
查看次数

标签 统计

c# ×1

idisposable ×1

using-statement ×1