2010-06-25 7 views

Respuesta

9

sí tiene el método Dispose través de la herencia, pero es una Implementación explícita. Llamarlo, que tendría que utilizar

((IDisposable)myObject).Dispose(); 

O, por supuesto, simplemente se envuelve en un bloque using, como lo hace la llamada explícita para usted.

+2

+1 por mencionar su implementación explícita. Como otros han dicho que está en la base, pero todavía lo verías, respondiste por qué no puedes verlo fácilmente. –

+2

¿Cuál es el razonamiento detrás de usar una implementación explícita? – MCS

+0

@MCS, ¡esa es una buena pregunta! En realidad, suena como una buena * nueva * pregunta para stackoverflow de por qué algunas clases tienen implementaciones explícitas IDisposable, ya que enmascaran el hecho de que el objeto debe ser eliminado para el desarrollador promedio que no consulta la documentación cada vez que él/ella usa una clase. –

10

Su implementadas en el WebResponse clase base, ver http://msdn.microsoft.com/en-us/library/system.net.webresponse_methods.aspx

+0

no veo ningún método Dispose allí tampoco. – MCS

+2

Desplácese hasta "Implementaciones de interfaces explícitas" – blu

+0

Oh, está allí, justo debajo de la página bajo "Implementaciones de interfaces explícitas". ¿Porqué es eso? ¿Y por qué este método no aparece en IntelliSense cuando tengo una instancia de FtpWebResponse? – MCS

4

Cuando implemente explícitamente un interface, no obtendrá el método en la lista. Tendrá que lanzar ese objeto al interface implementado para tener acceso a ese método.

public class MyClass : IDisposable 
{ 
    void IDisposable.Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 

Referencia: http://msdn.microsoft.com/en-us/library/ms173157.aspx

Cuestiones relacionadas