我使用的是FtpWebResponse类,但没有看到Dispose方法。 It turns out这个类实现IDisposable,但这样明确,这样你必须先投你的实例IDisposable接口调用Dispose之前:为什么类会显式而不是隐式地实现IDisposable?
// response is an instance of FtpWebResposne
((IDisposable) response).Dispose();
为什么会一类的,如这一个设计师选择要明确实现IDisposable?由于Anthony Pegram says这样做,掩盖了这样一个事实,即应该为普通开发人员处理该对象,而该开发人员在每次使用某个类时都未查阅文档。
我同意,但这里怪异的部分是行为可能不同。反射器显示Dispose()调用Close(),然后调用名为OnDispose()的内部虚拟。 Close()不会,所以你可能会从这两种方法中获得不同的行为(尽管它对FtpWebResponse没有影响,因为OnDispose()实现是空的) – JMarsch 2010-06-25 15:46:42
两个具有相同名称的方法有什么问题? CLR通过C#(p。546)表示:“某些提供dispose模式的类也提供了一个方便的Close方法;但是dispose模式不需要这种方法。例如,System.IO.FileStream类提供了dispose模式,而这个类也是提供了一种Close方法,程序员发现关闭文件比处理文件更自然。“ – MCS 2010-06-25 15:49:08
@JMarsch:这可能是一个延期; .NET 1.1 BCL类有很多情况,其中'Close'和'Dispose'确实有稍微不同的行为。 AFAIK,除了'DbConnection'和派生类型之外,这些都已经被清除了。 – 2010-06-25 15:54:26