我玩弄今天System.Net.HttpListenerResponse
,我注意到仍有顯然是在我的知識有關using
差距。爲什麼我可以使用,但不是object.dispose()?
using (HttpListenerResponse response = context.Response)
{
// Do stuff
}
是完全有效的代碼,但是,該對象沒有Dispose()方法。
爲什麼using
還能用嗎?
我玩弄今天System.Net.HttpListenerResponse
,我注意到仍有顯然是在我的知識有關using
差距。爲什麼我可以使用,但不是object.dispose()?
using (HttpListenerResponse response = context.Response)
{
// Do stuff
}
是完全有效的代碼,但是,該對象沒有Dispose()方法。
爲什麼using
還能用嗎?
IDisposable.Dispose
在System.Net.HttpListenerResponse
明確實施。要從您的代碼中調用它,您必須首先將其轉換爲IDisposable
。
HttpListenerResponse response = GetResponse();
// doesn't work
response.Dispose();
// do work
((IDisposable)response).Dispose();
從IDisposable
的HttpListenerResponse
繼承從而使using
語句來自動調用Dispose()
方法時完成。
HttpListenerResponse
的明確定義,如下Dispose()
方法。 (取自反編譯)。
void System.IDisposable.Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
正如你可以在它documentation看到,HttpListenerResponse
確實實現IDisposable
。該接口實現明確不過,在「顯式接口實現」所列:
void IDisposable.Dispose()
如C# Interfaces. Implicit implementation versus Explicit implementation解釋說:
明確implentation它允許只有當強制轉換爲接口本身是可訪問的。
所以你必須強制轉換爲IDisposable
以調用方法:
((IDisposable)response).Dispose();
此API支持.NET Framework基礎結構,不打算直接從您的代碼中使用。
另請參閱Why would a class implement IDisposable explicitly instead of implicitly?。
+1從我..很好的例子 – Nico