类成员和使用语句

时间:2012-08-29 18:09:47

标签: c# .net

假设定义了一个类:

class TestClass
{
    MemoryStream s = new MemorySteam();

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

当using语句退出范围时,s会发生什么?

编辑: 在另一种方法中使用s会出现问题吗?

编辑2:在MemoryStream的第一个实例化中是否会有一个未被引用的对象?

3 个答案:

答案 0 :(得分:7)

调用Dispose方法。 (请注意,它必须实现IDisposable接口,以便它可以保证Dispose可用)

The MSDN reference is pretty good IMO

Phil Haack also wrote an in depth article on this 7 years ago.

更新您的编辑

一旦方法调用了dispose方法,如果您尝试在方法范围之外使用它,则会引发异常。所以,是的,在使用之外引用它是不好的。 To be precise, it will throw an ObjectDisposedException

答案 1 :(得分:6)

调用Dispose方法。

using Statement (C# Reference)

答案 2 :(得分:2)

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

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

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