我在Pocket PC 2003(Visual Studio 2005)的.NET CF 2.0项目中遇到了一些奇怪的事情。我正在处理System.IO.Stream
对象,发现IDE不会自动完成Dispose()
方法。我手动输入并收到:
'System.IO.Stream.Dispose(bool)'由于其保护级别而无法访问
错误是指受保护的Dispose(bool)
方法。 Dispose()
要么是私人的,要么不在场。
问题1:这怎么可能? Stream
实施IDisposable
:
public abstract class Stream : MarshalByRefObject, IDisposable
...而IDisposable
需要Dispose()
方法:
public interface IDisposable
{
void Dispose();
}
我知道编译器不会让我在我的代码中侥幸逃脱。
问题2:通过直接处理和直接处理我的流会导致问题吗?
IDisposable idisp = someStream;
idisp.Dispose();
编译器接受隐式转换。
编辑: question 939124已经回答了这个问题。 Stream
类明确地实现IDisposable
。这是我完全忘记的语言功能。
答案 0 :(得分:6)
Stream实现了IDisposable接口,但隐藏了“官方”名称Dispose并公开了在内部调用它的方法Close。所以调用Stream.Close()等于调用IDisposable.Dispose()。
和q2: 不,这不会导致问题,但不是必要的。