he implementado recientemente una clase como:¿Por qué implementación de interfaz explícita?
class TestClass : IDisposable
{
RegistryKey m_key;
public TestClass()
{
m_key = Registry.CurrentUser.OpenSubKey("Software", false);
}
public void Dispose()
{
// m_key.Dispose();
IDisposable disp = m_key;
disp.Dispose();
}
}
Si descomentar la llamada directa a disponer, consigo CS0117 de error (" 'Microsoft.Win32.RegistryKey' no contiene una definición para 'botar'"). Algunos de Google me llevaron al this thread, donde aprendí lo que estaba pasando, así que ahora entiendo su mecánica. La documentación de MSDN sugiere que el autor preferiría que llame a Close() en lugar de Dispose(), pero no explica por qué.
¿Cuál es el propósito de este patrón (que creo que también lo he visto en las clases IO)? A la luz del hecho de que esta fue una decisión intencional del autor de la clase, ¿qué tan malo es el código anterior (la llamada a Dispose a través de la interfaz IDisposable)? No puede ser tan malo, después de todo, es lo que sucedería en una declaración de uso, ¿verdad?
[ediciones: 1) cambiar el título de "no público" a "explícito" 2) eliminan la implementación explícita de mi código, dejado accidentalmente en la experimentación]
Puede usar '(m_key como IDisposable) .Disponer();' para abreviar. –