FtpWebResponse implementa IDisposable, pero no tiene un método de eliminación. ¿Cómo es eso posible?¿Cómo implementa esta clase IDisposable si no tiene un método Dispose?
Respuesta
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.
Su implementadas en el WebResponse clase base, ver http://msdn.microsoft.com/en-us/library/system.net.webresponse_methods.aspx
no veo ningún método Dispose allí tampoco. – MCS
Desplácese hasta "Implementaciones de interfaces explícitas" – blu
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
Se implementa en el WebResponse clase base
void IDisposable.Dispose()
{
try
{
this.Close();
this.OnDispose();
}
catch
{
}
}
alt text http://img227.imageshack.us/img227/2428/redgatesnetreflector.png
Hereda de System.Net.WebResponse que implementa estos métodos.
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
- 1. IDisposable GC.SuppressFinalize (esta) ubicación
- 2. ¿Cómo implementa "adecuadamente" Dispose() (según FxCop) cuando su implementación es un método vacío? (CA1063)
- 3. ¿Cómo implementa esta clase el método "__iter__" sin implementar "next"?
- 4. Compruebe si una clase tiene un método
- 5. ¿Por qué estoy recibiendo CA2000 con un miembro privado IDisposable dentro de mi clase IDisposable?
- 6. Implementando IDisposable en una subclase cuando el padre también implementa IDisposable
- 7. System.Net.HttpListener solo implementa explícitamente IDisposable
- 8. ¿Cómo puedo determinar si se implementa un método abstracto?
- 9. Finalizador e IDisposable
- 10. VB.NET - ¿Se debe agregar un método Finalize al implementar IDisposable?
- 11. por qué no hay un método de eliminación en HttpWebResponse
- 12. Singleton con finalizador pero no IDisposable
- 13. Objetivo C: Dada una identificación de clase, ¿puedo verificar si esta clase implementa un determinado protocolo? O tiene un cierto selector?
- 14. jQuery Si DIV no tiene clase "x"
- 15. Obtener Intellisense en la interfaz que implementa un método si ese método no tiene sus propios comentarios XML
- 16. System.ServiceModel.ServiceHost implementa IDisposable pero siga no es pública
- 17. Implementación IDisposable en una clase sellada
- 18. ¿Por qué la clase python datetime tiene un método 'fromtimestamp', pero no un método 'totimestamp'? clase
- 19. clase abstracta no implementa interfaz
- 20. Compruebe si la clase tiene el método estático
- 21. Comprobar si la clase tiene método en PHP
- 22. ¿Cómo defino una clase genérica que implementa una interfaz y restringe el parámetro de tipo?
- 23. ¿Por qué Enumerable.Range Implement IDisposable?
- 24. ¿Cómo agrego la funcionalidad Dispose a un C# UserControl?
- 25. ¿Prueba si una clase tiene un atributo?
- 26. Cómo comprobar si el método tiene un atributo
- 27. jQuery: compruebe si un objeto tiene clase
- 28. llame a un método de interfaz explícita de clase base en F #
- 29. ¿Cómo comprobar si una clase Java tiene un método particular en ella?
- 30. C# clase no implementa heredó miembro abstracta
+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. –
¿Cuál es el razonamiento detrás de usar una implementación explícita? – MCS
@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. –