你如何在C#中隐藏封装?

时间:2009-04-02 02:10:09

标签: c# .net oop

Socket.Dispose()是无法访问的成员。但是,我们可以通过执行以下操作来绕过此问题:

((IDisposible)Socket).Dispose()

两个问题:

  1. 为什么允许这样做?
  2. 这如何在内部发挥作用?

2 个答案:

答案 0 :(得分:5)

我相信这个功能是“显式接口实现”。如果将对象显式地转换为接口,则使用此方法仅允许调用实现的方法。

这是一个关于此的教程:

http://msdn.microsoft.com/en-us/library/aa288461(VS.71).aspx

答案 1 :(得分:3)

每当一个类实现一个像Close()这样的方法完成与Dispose()相同的工作时,建议显式实现IDisposable接口,这样开发人员通常只会看到Close()方法,仍然可以通过IDisposable接口访问Dispose方法,以供预期使用Dispose方法的框架使用。

有时基本上以不同的名称暴露Dispose是有意义的,例如Close,它使代码更具可读性。您可以在.NET Framework中看到这些内容,这些内容可以是“已关闭”,例如文件句柄和连接。

修改:请参阅http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756