2011-12-16 65 views
2

我正在執行IDataReader,我想知道Dispose的執行是否應該調用Close或不。應該IDataReader :: Dispose調用IDataReader :: Close?

另外,應該Close請致電Dispose

我的猜測是,Close不應該叫DisposeDispose可以呼叫Close,因爲據我所知,你應該能夠調用Dispose多次你在任何物體想要的。但這只是一個猜測,我寧願聽到專家的意見。

+0

我剛剛注意到它是IDataReader接口vs該類對不起SLaks – MethodMan 2011-12-16 19:34:20

回答

6

Close()Dispose()應該做同樣的事情(應該打另一個)。
但是,Close()不需要多次調用。

你應該繼承基類DbDataReader類而不是自己重新實現整個事情;如果是這樣,您需要覆蓋摘要Close()

-1

IDataReader是在界面中。它並不指定實現。

+1

人們如何編寫接口的文檔呢? – Juan 2011-12-16 19:30:33

1

.Dispose()應該完成一件事情:釋放非託管資源。因此,您應該調用.Close()當且僅當調用該函數是釋放非託管資源的正確方法。在這種情況下,我會說這是真的(它會釋放一個數據庫連接),所以你應該調用這個函數。

1

它們幾乎都是相同的東西,除了Close可以被調用超過1次而沒有發生異常。

如果您多次使用該對象,請實現.Close,如果只執行一次,請實現.Dispose()。