转到Using语句,是否会调用dispose?

时间:2015-11-18 18:59:44

标签: c# .net memory-leaks using goto

考虑以下

using (Entity e = new Entity())
{
     goto: Mars
}

我有泄漏吗?不是说我会做这样的愚蠢而只是想知道。

1 个答案:

答案 0 :(得分:2)

是的Dispose会被调用。 using转换为try/finally阻止类似:

try
{
    goto Mars;
    Console.WriteLine("in try");
}
finally
{

    Console.WriteLine("in finally");
}
Mars:
Console.WriteLine("in Mars");

上面的输出是:

in finally
in Mars

您也可以通过创建自己的实现IDisposable的类来测试它,如:

class MyDisposable : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("Dispose called");
    }
}

然后:

using (MyDisposable myDisposable = new MyDisposable())
{
    goto Mars;
}

Mars:
Console.WriteLine("in Mars");

输出结果为:

Dispose called
in Mars