3

假设定义了一个类:

class TestClass
{
    MemoryStream s = new MemorySteam();

    void DoStuff()
    {
        using (s = new MemoryStream())
        {
            // Do stuff
        }
    }
}

s当 using 语句退出作用域时会发生什么?

s编辑:使用不同的方法会有问题吗?

编辑 2:MemoryStream 的第一次实例化中是否会有未处理的未引用对象?

4

3 回答 3

7

它的Dispose方法被调用。(注意,它必须实现 IDisposable 接口,这样才能保证 Dispose 可用)

MSDN 参考非常好 IMO

7 年前,Phil Haack 也就此写了一篇深入的文章。

更新您的编辑

一旦方法调用了它的 dispose 方法,如果您尝试在方法范围之外使用它,它将引发异常。所以,是的,在使用之外引用它会很糟糕。准确地说,它会抛出一个 ObjectDisposedException

于 2012-08-29T18:10:19.597 回答
6

它的 Dispose 方法被调用。

using 语句(C# 参考)

于 2012-08-29T18:10:35.743 回答
2

在对象上调用 Dispose 方法以清理此对象

我们调用 using 是为了清理非托管对象,因为它们没有被 GC 清理

GC 没有关于非托管对象的信息,因此开发人员必须清理

于 2012-08-29T18:10:50.527 回答