C# WebResponse如何没有“安全性”;处置;实现IDisposable时是否公开可见?

C# WebResponse如何没有“安全性”;处置;实现IDisposable时是否公开可见?,c#,.net,httpwebresponse,webresponse,C#,.net,Httpwebresponse,Webresponse,在调试了最近涉及WebResponse的一些代码之后,我发现我遇到的问题是在发出另一个WebResponse之前没有正确地处理WebResponse。我被引入歧途,因为WebResponse需要被转换为IDisposable才能真正调用dispose(或者您可以使用“using”来实现相同的目标) 因此,我的问题是: 1) 微软用什么来实现这一点 IDisposable是一个接口,因此是公共的,但WebResponse会根据MSDN配置修改要保护的访问修饰符。我认为这是不可能的 2) 以这种方式

在调试了最近涉及WebResponse的一些代码之后,我发现我遇到的问题是在发出另一个WebResponse之前没有正确地处理WebResponse。我被引入歧途,因为WebResponse需要被转换为IDisposable才能真正调用dispose(或者您可以使用“using”来实现相同的目标)

因此,我的问题是:

1) 微软用什么来实现这一点

IDisposable是一个接口,因此是公共的,但WebResponse会根据MSDN配置修改要保护的访问修饰符。我认为这是不可能的

2) 以这种方式隐藏dispose的好处是什么


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

显式接口实现:

public class Foo : IDisposable {
    void IDisposable.Dispose() { /* code here */ }
}
这可以通过任何接口方法完成。
using
API知道如何使用
IDisposable
实现

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

public class Foo : IDisposable {
    void IDisposable.Dispose() { /* do something */ }
    public void Dispose() { /* do something completely different */ }
}

您现在如何正确处理
WebResponse
?根据,WebResponse不仅继承了
IDisposable
,还实现了
Dispose()
方法。您需要做的就是将
WebResponse
对象包装在
using
块中。为什么不直接使用“using”?无论如何,它都会自动处理对象。我确实使用了“using”(我在问题中提到过)。只是好奇为什么会这样。@RobertHarvey现在点击“其他版本”下拉列表;我猜OP使用的是@RobertHarvey不,我使用的是4.0。我只是觉得这是一个很好的学习体验。@RobertHarvey在.NET 4.0之前,是的,当我进入WebResponse的定义时,这不应该在文档中出现吗?@SethMicalizzi:如果它是
私有的
。我可能要求你去看看微软的团队负责人,但是为什么在这种情况下使用显式接口实现呢?隐藏它的好处是什么?@Seth公平地说,不隐藏它的唯一好处是让它一开始就明显存在——你自己很少会想称之为它。然而,既然现在是公开的,他们似乎同意你的看法:我不确定从历史角度对此进行推测是否明智