FtpWebResponse implementa IDisposable, ma non ha un metodo Dispose. Come è possibile?In che modo questa classe implementa IDisposable se non dispone di un metodo Dispose?
risposta
ha comunque il metodo Dispose per via ereditaria, ma è un implementazione esplicita. Per chiamarlo, si dovrà utilizzare
((IDisposable)myObject).Dispose();
O, naturalmente, basta avvolgerlo in un blocco using
, come fa la chiamata esplicita per voi.
sua attuate nel WebResponse classe base, vedi http://msdn.microsoft.com/en-us/library/system.net.webresponse_methods.aspx
non vedo alcun metodo Dispose neanche lì. – MCS
Scorri verso il basso fino a "Implementazioni esplicite dell'interfaccia" – blu
Oh, è lì, appena più in basso nella pagina in "Implementazioni esplicite dell'interfaccia". Perché? E perché questo metodo non compare in IntelliSense quando ho un'istanza di FtpWebResponse? – MCS
E 'implementato nella WebResponse classe base
void IDisposable.Dispose()
{
try
{
this.Close();
this.OnDispose();
}
catch
{
}
}
alt text http://img227.imageshack.us/img227/2428/redgatesnetreflector.png
Esso eredita da System.Net.WebResponse che implementa questi metodi.
Quando si implementa uno interface
in modo esplicito, non si otterrà il metodo nell'elenco. Dovrai lanciare quell'oggetto per implementare interface
per ottenere l'accesso a tale metodo.
public class MyClass : IDisposable
{
void IDisposable.Dispose()
{
throw new NotImplementedException();
}
}
Riferimento: http://msdn.microsoft.com/en-us/library/ms173157.aspx
+1 per menzionarne l'implementazione esplicita. Come altri hanno detto sulla base, ma lo vedresti ancora - hai risposto perché non puoi vederlo facilmente. –
Qual è il motivo dietro l'utilizzo di un'implementazione esplicita? – MCS
@ MCS, questa è una buona domanda! In realtà, sembra una buona * nuova * domanda per lo stackoverflow del perché alcune classi hanno implementazioni esplicite IDisposable, in quanto maschera il fatto che l'oggetto debba essere smaltito per lo sviluppatore medio che non consulta la documentazione ogni volta che lui/lei usa una classe. –