【发布时间】:2010-09-29 08:02:04
【问题描述】:
我最近实现了一个类似的类:
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();
}
}
如果我取消对 Dispose 的直接调用的注释,我会收到错误 CS0117(“'Microsoft.Win32.RegistryKey' 不包含 'Dispose' 的定义”)。一些谷歌搜索将我带到this thread,在那里我了解了发生了什么,所以我现在了解了它的机制。 MSDN 文档表明作者更喜欢我调用 Close() 而不是 Dispose(),但没有解释原因。
这种模式的目的是什么(我想我在 IO 类中也看到过)?鉴于这是类作者的有意决定,上面的代码有多糟糕(通过 IDisposable 接口调用 Dispose)?不会太糟糕 - 毕竟,这是在 using 语句中会发生的事情,对吧?
[编辑:1)将标题从“非公开”更改为“显式”2)从我的代码中删除了显式实现,不小心从实验中遗留下来]
【问题讨论】:
-
您可以使用
(m_key as IDisposable).Dispose();进行速记。