c# - WebResponse 在实现 IDisposable 时如何不让 "Dispose"公开可见?

标签 c# .net httpwebresponse webresponse

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

所以我的问题是:

1) Microsoft 使用什么来完成此任务?

IDisposable 是一个接口(interface),因此是公开的,但 WebResponse 以某种方式改变了访问修饰符,使其根据 MSDN 文档受到保护。我认为这是不可能的。

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

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

最佳答案

显式接口(interface)实现:

public class Foo : IDisposable {
    void IDisposable.Dispose() { /* code here */ }
}

这可以通过任何接口(interface)方法来完成。 using API 知道使用 IDisposable 实现。

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

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

关于c# - WebResponse 在实现 IDisposable 时如何不让 "Dispose"公开可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503271/

相关文章:

c# - Linq 选择项目直到下一次出现

go - 如何使用 proxy.ModifyResponse?

c# - 更改 boolean 值的默认值

.net - C# 异步。套接字编程

c# - 如何获取文本文件的内容并将其复制到剪贴板?

c# - HttpWebResponse 返回 404 错误

c# - 如何解析返回的 Set-Cookie session ID 的 HttpWebResponse.Headers.Keys

c# - Dapper-“必须声明标量变量@VersionId”

c# - 得到;不能正常工作

c# - 在 Windows 窗体中显示控件集合