2013-02-02 50 views
-2

大家都知道在我們要清理非託管資源時使用using關鍵字。在用戶定義的類中使用C#使用關鍵字

如果該類實現IDisposable,那麼我們可以使用using關鍵字與該類的對象。但是,如果我想使用using關鍵字與我自己班級的對象,那我該如何使用它。

如果我不得不在自己的課程中實現IDisposable,那麼我還必須在我的課程中爲其Dispose()方法編寫代碼。那麼當我在Dispose()方法中編寫我自己的代碼時,在這裏使用using關鍵字沒有意義。那麼我如何使用用戶定義的類型(如類&結構)。

請用一些例子來解釋。

+0

減少票選民衆。這只是一些人的學習曲線! –

+2

這麼多互相幫助。我不知道6個downvotes增加了很多... – bas

+2

這個問題沒有錯。我不明白倒票。 –

回答

5

using關鍵字的一點是,它呼籲Dispose()在你的類對您的實例,因此您不必自己編寫myDisposableObject.Dispose()當你使用它來完成。它不會幫你編寫該方法 - 你仍然必須自己編寫它來告訴框架你希望如何處理你的非託管資源。

我不確定你在找什麼樣的例子,因爲你明確知道如何實現IDisposable接口和它的Dispose()方法。我可以在這裏說的是,如果你沒有任何非託管資源來處置(或成員本身IDisposable),那麼不要執行IDisposable,也不要使用using。該關鍵字僅用於方便地使用做的具有非託管資源,否則需要手動清理。

+1

要明確的是,如果類包含其他_managed_資源是'IDisposable'(例如Timer,Stream等),那麼類也可以實現'IDisposable'。 –

+0

@ErenErsönmez:是的。我已經更新了我的答案。 – BoltClock

+0

請注意,'using'不只是調用Dispose(),它將它放在finally塊中並添加一個空值檢查。 – antonijn

2

using的目的不是爲了免除您實施IDisposable

using的要點是,您可以確保在流程正常退出塊或因異常而退出塊時正確放置對象。

0

using語句在塊終止時調用使用對象的Dispose方法。請參閱this以瞭解如何編譯使用塊。

但是,您有責任實施Dipose方法,其中必須釋放該對象佔用的資源。