2011-12-16 20 views
2

私はIDataReaderを実装しており、Disposeの実装がCloseを呼び出すかどうかは疑問です。IDataReader :: DisposeはIDataReader :: Closeを呼び出す必要がありますか?

CloseDisposeとする必要がありますか?

私の推測では、私の知る限り、あなたが任意のオブジェクトにしたいようDispose何度でも呼び出すことができるはずなのでCloseDisposeDisposeコールCloseを呼ぶべきではないということです。しかしこれはちょうど推測であり、むしろ専門家の意見を聞きたいと思う。

+0

IDataReaderインターフェイスとクラスとのことが分かりました。ごめんなさい。SLAKs – MethodMan

答えて

6

Close()Dispose()は、同じことをする必要があります(一方は他方を呼び出す必要があります)。
ただし、Close()は複数回呼び出し可能である必要はありません。

自分ですべてを再実装するのではなく、ベースのDbDataReaderクラスを継承する必要があります。その場合は、要約Close()を上書きする必要があります。

-1

IDataReaderはインターフェイスにあります。実装を指示するものではありません。

+1

どうやって人々は、インターフェイスのドキュメントを書くのですか? – Juan

+0

um ...それらを文書化するには? –

+1

実装が何をすべきかを文書化しますか? – Juan

1

.Dispose()は、管理対象外のリソースを解放するという1つのことを行う必要があります。したがって、その関数を呼び出すことがアンマネージリソースを解放する正しい方法である場合に限り、.Close()に電話する必要があります。この場合、私はそれが真実であると言います(データベース接続を解放します)ので、関数を呼び出す必要があります。

1

例外を除いてCloseを1回以上呼び出すことができる点を除き、どちらもほぼ同じことです。

オブジェクトを複数回使用する場合は、.Closeを実装するのは一度だけであれば.Dispose()を実装します。

関連する問題