FtpWebResponse实现了IDisposable,但它没有Dispose方法。这怎么可能?如果此类没有Dispose方法,该类如何实现IDisposable?
5
A
回答
9
它确实有通过继承Dispose方法,但它是一个明确的实施。要调用它,你将不得不使用
((IDisposable)myObject).Dispose();
或者,当然,只是包装在一个using
块,因为它明确你的电话。
10
其在基类WebResponse的落实,见http://msdn.microsoft.com/en-us/library/system.net.webresponse_methods.aspx
3
它在基类WebResponse的实施
void IDisposable.Dispose()
{
try
{
this.Close();
this.OnDispose();
}
catch
{
}
}
alt text http://img227.imageshack.us/img227/2428/redgatesnetreflector.png
2
它从System.Net.WebResponse继承,它实现了这些方法。
4
当您明确实施interface
时,您将无法获得列表中的方法。您必须投射该对象才能实施interface
以访问该方法。
public class MyClass : IDisposable
{
void IDisposable.Dispose()
{
throw new NotImplementedException();
}
}
+1提及其明确实施。正如其他人所说的那样,但你仍然可以看到它 - 你回答了为什么你不容易看到它。 – 2010-06-25 14:42:41
使用显式实现背后的原因是什么? – MCS 2010-06-25 14:43:03
@MCS,这是个好问题!实际上,对于为什么某些类具有显式IDisposable实现的原因,这听起来像是一个很好的* new *问题,因为它掩盖了这样一个事实,即应该为普通开发人员处理该对象,因为他/她每次没有查阅文档使用一个类。 – 2010-06-25 14:48:25