我应该处置StreamReaders / Writers的副本吗

时间:2018-07-19 18:11:04

标签: c# system.io.directory

所以我有一个将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?
    }
}

3 个答案:

答案 0 :(得分:2)

您正在将StreamReader的1个实例传递到您的Class1实例中。它不会创建副本,而是传递对该现有StreamReader的引用。如果要在this.Reader.Dispose();实例中调用Class1,则将在与StreamReader方法中创建的Test()实例完全相同的实例上调用它。

因此,此代码块的答案是,因此无需在同一实例上再次调用Dispose

答案 1 :(得分:1)

您的代码中只有一个StreamReader实例,该实例是从不同的变量(3个,包括构造函数中的参数)引用的,并对其进行一次处理就足够了。

但是,如果您在致电StreamReader之后需要在Class1中使用Reader.Dispose();,则 您的代码将无效 ,因为Class1内部的一个是相同的,并且也会被处置。

答案 2 :(得分:0)

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