I umgesetzt kürzlich eine Klasse wie:Warum explizite Schnittstellenimplementierung?
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();
}
}
Wenn ich den direkten Aufruf zu entsorgen Kommentar-, erhalte ich Fehler CS0117 („‚Microsoft.Win32.RegistryKey‘enthält keine Definition für‚entsorgen‘enthalten“). Etwas Googeln führte mich zu this thread, wo ich lernte, was vor sich ging, also verstehe ich jetzt die Mechanik davon. Die MSDN Dokumentation schlägt vor, dass der Autor bevorzugen würde, dass ich Close() anstelle von Dispose() anrufe, aber nicht erklärt warum.
Was ist der Zweck dieses Musters (was ich denke, ich habe es auch in den IO-Klassen gesehen)? Angesichts der Tatsache, dass dies eine absichtliche Entscheidung des Klassenautors war, wie schlimm ist der obige Code (der Aufruf von Dispose über die IDisposable-Schnittstelle)? Es kann nicht so schlimm sein - schließlich ist es das, was in einer Nutzungsanweisung passieren würde, oder?
[Änderungen: 1) geändert Titel von "non-public" auf "explicit" 2) die explizite Implementierung von meinem Code entfernt, zufällig von Experimenten in der linke]
Sie könnten '(m_key als IDisposable) .Dispose();' für Kurzschrift verwenden. –