Aunque hay un buen montón de Q & Como IDisposable
con respecto a encontrar en SO, no he encontrado una respuesta a esto todavía:aplicación explícita de IDisposable
por lo general siguen la práctica que cuando uno de mi clases posee un objeto IDisposable
y luego implementa IDisposable
y llama al Dispose
en el objeto propiedad. Sin embargo, recientemente me encontré con una clase que implementó IDisposable
explícitamente, impidiéndome así llamar directamente al Dispose
forzándome a lanzarlo, lo cual me pareció molesto e innecesario.
Así que la pregunta: ¿Por qué y cuándo uno querría utilizar una implementación de interfaz explícita de IDisposable
? Sé que existen razones perfectamente válidas y válidas para implementar una interfaz explícitamente, pero con respecto a IDisposable
, la razón no está del todo clara para mí.
¿Cuáles son estas "buenas y válidas razones", y por qué no deberían contener también para "IDisposable"? ¿Y por qué es "molesto" lanzar un objeto a "IDisposable"? – chiccodoro
A veces es necesario que una clase implemente dos o más interfaces cuyos nombres de miembros entrarían en conflicto. Es un buen y adecuado uso para nombrar interfaces explícitamente. Estoy de acuerdo con el OP en que la convención de nombrar arbitrariamente el método de limpieza como algo diferente a Dispose es tonto. Incluso si una clase tiene un método Close, eso no significa que no deba tener un método Dispose. Como llamar a Dispose después de llamar a Close es en el peor algo redundante, ¿qué hay de malo en tener ambos métodos? – supercat
@chiccodoro: la implementación de la interfaz explícita IMO es útil sobre todo cuando se necesitan implementar dos interfaces que tienen miembros conflictivos. En cualquier otro caso, tener un objeto que se puede convertir en una interfaz en lugar de "ser", la interfaz no es natural y molesta. –