IDataReader::Dispose是否应调用IDataReader::Close?

3

我正在实现 IDataReader 接口,想知道是否应该在 Dispose 方法中调用 Close 方法。

另外,Close 方法是否应该调用 Dispose 方法?

我的猜测是,Close 方法不应该调用 Dispose 方法,而 Dispose 方法可以调用 Close 方法,因为根据我所知,你可以在任何对象中多次调用 Dispose 方法。但这只是我的猜测,我更愿意听取专家的意见。


我刚刚注意到是IDataReader接口而不是类,抱歉SLaks。 - MethodMan
4个回答

6

Close()Dispose() 应该做相同的事情(一个应该调用另一个)。 然而,Close() 不需要多次可调用。

您应该继承基础的 DbDataReader 类而不是重新实现整个类;如果这样,您需要重写抽象方法 Close()


1

.Dispose()应该只做一件事: 释放非托管资源。因此,只有在调用该函数是释放非托管资源的正确方法时,您才应该调用.Close()。在这种情况下,我认为是正确的(它将释放数据库连接),因此您应该调用该函数。


1

它们几乎是相同的东西,除了 Close 可以被多次调用而不会引发异常。

如果您使用对象超过一次,请实现 .Close,如果只使用一次,请实现 .Dispose()。


-1

IDataReader 是一个接口,它并不规定具体的实现方式。


1
人们为什么要编写接口文档呢? - Juan
为了记录它们? - John Saunders
1
记录下他们的实现应该做什么? - Juan
记录下它们所有的实现意图。未被记录的内容可能不属于接口的一部分(比如Dispose是否必须调用Close或者反之亦然)。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接