c# - "using"语句是否总是处理对象?

标签 c# dispose using using-statement

using 语句是否总是处置对象,即使其中有返回或抛出异常?即:

using (var myClassInstance = new MyClass())
{
    // ...
    return;
}

using (var myClassInstance = new MyClass())
{
    // ...
    throw new UnexplainedAndAnnoyingException();
}

最佳答案

是的,这就是重点。它编译为:

SomeDisposableType obj = new SomeDisposableType();
try
{
    // use obj
}
finally
{
    if (obj != null) 
        ((IDisposable)obj).Dispose();
}

注意这里的术语;对象本身没有被释放。 Dispose() 方法被调用,并且通常会释放非托管资源。

关于c# - "using"语句是否总是处理对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357258/

相关文章:

c# - 如何将图像发送到浏览器

c# - 为什么不能直接在外部调用公共(public)事件?

c# - LiveSDK 5.6.3 无法在 UWP 商店应用程序中运行

c# - 我如何正确处理此代码?

c++ - 如何使用 'using' 指令分割循环依赖

c++ - 编译器没有实现 "using typename"指令吗?

c# - 如何在 Entity Framework 4 中切换 SQL 和 SQL CE?或者如何以编程方式更改 edmx 文件中的 "Schema Namespace"

powershell - 在 Powershell 中不使用 dispose() 有多糟糕?

c# - System.Drawing 对象非托管资源处理

c# - 出于可读性的原因,使用空 Dispose 实现 IDisposable