【问题标题】:.NET CF 2.0: Stream implements IDisposable ... kind of?.NET CF 2.0:Stream 实现 IDisposable ......
【发布时间】:2010-05-18 15:35:13
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

和 q2: 不,这不会造成问题,但这不是必需的。

【讨论】:

  • 是的,我刚刚在另一个问题的答案中看到 Stream 明确实现了接口。这是我完全忘记的语言功能。
猜你喜欢
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2018-07-17
  • 2011-01-30
相关资源
最近更新 更多