【发布时间】:2018-01-16 18:34:58
【问题描述】:
MSDN 文档说“如果您的应用只使用一个实现 IDisposable 的对象,请不要提供 IDisposable 实现。相反,您应该在完成后调用该对象的 IDisposable.Dispose 实现使用它。”
您有义务查看多远的继承层次? 例如,SqlCommand 不实现 IDisposable;但是,它的父类 DBCommand 可以。 SqlCommand 上的 MSDN 文档示例不包含 Using 子句。
此外,根据 MSDN 文档 (IDisposable and the inheritance hierarchy),如果您从实现 IDisposable 的基础派生,则您有义务重写 Disposable。哪个 SqlCommand 显然可以(参见 referencesource.microsoft.com)。但它还包括“请注意,派生类自身不实现 IDisposable 接口,也不包括无参数的 Dispose 方法。”。
那么 SqlCommand “实现 IDisposable” 是在顶部第一个引用的文档中定义的,还是在上面引用的第二个中定义的?
近十年来,没有人改变 MSDN 的示例。
无论如何,这只是一个例子。再一次,我的问题是,一个人有义务在继承树上多远查看是否有实现 IDisposable 的东西?
(注意: 关于 SqlCommand 的具体问题在这里问(do we need using for the SqlCommand or is it enough just for the SqlConnection and SqlDataReader),但据我所知,我的一般问题还没有被问到)
【问题讨论】:
标签: .net idisposable