C# IDataReader::Dispose是否应调用IDataReader::Close?
我正在实现C# IDataReader::Dispose是否应调用IDataReader::Close?,c#,idatareader,C#,Idatareader,我正在实现IDataReader,我想知道Dispose的实现是否应该调用Close 另外,是否应关闭调用处置 我的猜测是Close不应该调用Dispose,Dispose可以调用Close,因为在任何对象中,您都应该能够调用Dispose任意次数。但这只是一个猜测,我宁愿听听专家的意见。IDataReader在界面中。它不指示实现。Close()和Dispose()应该做同样的事情(一个应该调用另一个)。 但是,Close()不需要多次调用 您应该继承基本的DbDataReader类,而不是自
IDataReader
,我想知道Dispose
的实现是否应该调用Close
另外,是否应关闭
调用处置
我的猜测是
Close
不应该调用Dispose
,Dispose
可以调用Close
,因为在任何对象中,您都应该能够调用Dispose
任意次数。但这只是一个猜测,我宁愿听听专家的意见。IDataReader
在界面中。它不指示实现。Close()
和Dispose()
应该做同样的事情(一个应该调用另一个)。但是,
Close()
不需要多次调用
您应该继承基本的
DbDataReader
类,而不是自己重新实现整个过程;如果是这样,您需要重写抽象Close()
。Dispose()
应该只做一件事:释放非托管资源。因此,当且仅当调用该函数是释放非托管资源的正确方法时,才应调用.Close()
。在这种情况下,我会说这是真的(它将释放一个数据库连接),因此您应该调用该函数。它们几乎是一样的,只是Close可以被调用一次以上而不会出现异常
如果您多次使用该对象,请实现.Close,如果只有一次,请实现.Dispose()。那么人们为什么要为接口编写文档呢?嗯。。。为了记录它们?记录它们的实现应该做什么?记录它们的所有实现打算做什么。未记录的内容可能不是接口的一部分(比如Dispose是否必须调用Close,反之亦然),我只是注意到它是IDataReader接口与类sorry SLaks