应该IDataReader :: Dispose调用IDataReader :: Close?

时间:2011-12-16 19:26:42

标签: c# idatareader

我正在实施IDataReader,我想知道Dispose的实施是否应该调用Close

另外,Close应该致电Dispose吗?

我的猜测是Close不应该致电DisposeDispose 可以致电Close,因为AFAIK你应该能够在任何对象中多次调用Dispose。但这只是一个猜测,我宁愿听取专家的意见。

4 个答案:

答案 0 :(得分:6)

Close()Dispose()应该做同样的事情(一个应该调用另一个) 但是,Close()不需要多次调用。

你应该继承基础DbDataReader类,而不是自己重新实现整个事物;如果是这样,您需要覆盖抽象Close()

答案 1 :(得分:1)

.Dispose()应该完成一件事:释放非托管资源。因此,当且仅当调用该函数是释放非托管资源的正确方法时,才应调用.Close()。在这种情况下,我会说这是真的(它将释放数据库连接),所以你应该调用该函数。

答案 2 :(得分:1)

它们几乎是相同的东西,除了可以被调用超过1次而没有得到异常。

如果多次使用该对象,请实现.Close,如果只执行一次,则实现.Dispose()。

答案 3 :(得分:-1)

IDataReader在界面中。它没有规定实施。