2010-06-25 8 views

risposta

9

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.

+2

+1 per menzionarne l'implementazione esplicita. Come altri hanno detto sulla base, ma lo vedresti ancora - hai risposto perché non puoi vederlo facilmente. –

+2

Qual è il motivo dietro l'utilizzo di un'implementazione esplicita? – MCS

+0

@ 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. –

10
+0

non vedo alcun metodo Dispose neanche lì. – MCS

+2

Scorri verso il basso fino a "Implementazioni esplicite dell'interfaccia" – blu

+0

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

4

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