我使用的是FtpWebResponse类,但没有看到Dispose方法。 It turns out该类实现了IDisposable,但是明确地这样做,以便在调用Dispose之前必须先将实例强制转换为IDisposable:
// response is an instance of FtpWebResposne
((IDisposable) response).Dispose();
为什么像这样的类的设计者会选择明确地实现IDisposable?作为Anthony Pegram says,以这种方式做事掩盖了这样一个事实:对象应该为每次使用课程时都没有查阅文档的普通开发人员处理。
答案 0 :(得分:15)
如果该类的Close
方法与Dispose
完全相同,则通常会执行此操作。原始Dispose
隐藏在显式实现中,因此完全相同的方法没有两个名称。
这里正式推荐:
(P.S。我不同意这个惯例。)
答案 1 :(得分:5)
答案 2 :(得分:1)
看着我也有点奇怪。对于它的价值:基类(WebResponse)实现了Close()方法。 Reflector显示WebResponse的Dispose()方法只调用Close()和一个不执行任何操作的内部OnDispose虚拟。
我必须承认它对我来说有点味道,但我敢打赌他们明确地实现了IDisposable,这样在调用Close()或Dispose()之间Intellisense就不会混淆了。
答案 3 :(得分:1)
除了已经说过的内容之外,我可能会建议实现IDisposable
明确鼓励使用using
块,因为它可以用于任何实现IDisposable
的类型,它是更自然(对大多数人来说,无论如何)写这个:
using (var response = GetResponse())
{
// do something
}
比这个:
var response = GetResponse();
// do something
((IDisposable)response).Dispose();
我不确定开发人员明确实施IDisposable
的意图,但这是可能的。