WebResponse在实现IDisposable时如何不公开显示"Dispose"?

Set*_*zzi 3 .net c# webresponse httpwebresponse

通过最近涉及WebResponse的一些代码调试后,我发现我遇到的问题是我在发出另一个之前没有正确处理WebResponse.因为WebResponse需要被转换为IDisposable以便实际调用dispose(或者你可以使用"using"来实现相同的目标),所以我误入歧途.

所以我的问题是:

1)Microsoft用什么来实现这一目标?

IDisposable是一个接口,因此是公共的,但WebResponse以某种方式改变了根据MSDN doumentation保护的访问修饰符.我认为这是不可能的.

2)以这种方式隐藏处置有什么好处?

为什么不让webResponse.Dispose()有效?

Mar*_*ell 6

显式接口实现:

public class Foo : IDisposable {
    void IDisposable.Dispose() { /* code here */ }
}
Run Code Online (Sandbox Code Playgroud)

这可以使用任何接口方法完成.该usingAPI知道使用IDisposable实施.

请注意,此功能不应过度使用; 以下内容会令人困惑,例如:

public class Foo : IDisposable {
    void IDisposable.Dispose() { /* do something */ }
    public void Dispose() { /* do something completely different */ }
}
Run Code Online (Sandbox Code Playgroud)