.NET CF 2.0:Stream实现IDisposable ......有点?

时间:2010-05-18 15:35:13

标签: c# .net compact-framework .net-2.0

我在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。这是我完全忘记的语言功能。

1 个答案:

答案 0 :(得分:6)

Stream实现了IDisposable接口,但隐藏了“官方”名称Dispose并公开了在内部调用它的方法Close。所以调用Stream.Close()等于调用IDisposable.Dispose()。

和q2: 不,这不会导致问题,但不是必要的。