0

所以我有一个以 StreamReader 作为变量的类。StreamReader 是通过构造函数设置的。当我使用这个类时,我在类之外创建了一个 StreamReader 并通过它。然后我处理通过类的构造函数传递的 StreamReader 实例。我需要在类中处理 StreamReader 实例吗?

代码:

private class Class1
{
    private StreamReader Reader;

    public Class1(StreamReader Reader)
    {
        this.Reader = Reader;
    }
}

private class Class2
{
    public void Test()
    {
        StreamReader Reader = new StreamReader(@"");
        Class1 Test = new Class1(Reader);
        Reader.Dispose();
        //Do I need to dispose the Reader in Class1 aswell?
    }
}
4

3 回答 3

2

您正在将 1 个实例传递给StreamReader您的Class1实例。它不会创建副本,它会传递该现有StreamReader. 如果您要调用this.Reader.Dispose();您的实例,您将在您可以在方法中创建Class1的完全相同的实例上调用它。StreamReaderTest()

所以这个代码块的答案是No,没有必要Dispose在同一个实例上再次调用。

于 2018-07-19T18:20:14.063 回答
1

您的代码中只有一个StreamReader实例,它被不同的变量引用(3 个包括构造函数中的参数),并且处理一次就足够了。

但是,如果您在调用后需要内部代码,则您的代码将不起作用,因为里面的代码是相同的,并且也将被处理掉。StreamReaderClass1Reader.Dispose();Class1

于 2018-07-19T18:22:34.103 回答
0

如果您有一个使用 IDisposable 的方法,一旦方法终止就不再需要它,那么您应该using { ... }在该方法中使用一个块,但是如果您将 IDisposable 传递给您的方法,那么您需要包装对带有using { ... }块的方法,或手动调用.Dispose().

于 2018-07-19T18:18:36.317 回答