3

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

另外,应该Close打电话Dispose吗?

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

4

4 回答 4

6

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

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

于 2011-12-16T19:29:37.903 回答
1

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

于 2011-12-16T19:30:48.263 回答
1

它们几乎是一样的,除了 Close 可以被调用超过 1 次而不会出现异常。

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

于 2011-12-16T19:31:55.880 回答
-1

IDataReader在界面中。它并不规定实施。

于 2011-12-16T19:29:29.273 回答