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

mva*_*bem 2 .net c# 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
Run Code Online (Sandbox Code Playgroud)

......并且IDisposable需要一种Dispose()方法:

public interface IDisposable
{
    void Dispose();
}
Run Code Online (Sandbox Code Playgroud)

我知道编译器不会让我在我的代码中侥幸逃脱.

问题2:我是否会通过直接处理我的流来解决问题?

IDisposable idisp = someStream;
idisp.Dispose();
Run Code Online (Sandbox Code Playgroud)

编译器接受隐式转换.

编辑:这已在问题939124中得到解答.在Stream类实现IDisposable明确.这是我完全忘记的语言功能.

Jou*_*aas 6

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

并且q2:不,这不会导致问题但不是必要的.