所以我有一个将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?
}
}
答案 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()
。