dispose と IDisposable を正しく使用するための優れた記事やチュートリアルを持っている人はいますか? これをジュニア開発者に説明しようとしていて、追加の資料や例などを入手したかった.
4 に答える
手始めとして、Shawn Farkas による MSDN の記事http://msdn.microsoft.com/en-us/magazine/cc163392.aspxを参照してください。決定的な記事は、http://www.bluebytesoftware.com/blog/2005/04/08/DGUpdateDisposeFinalizationAndResourceManagement.aspx の Joe Duffy によるもので、http: //www.bluebytesoftware.com/blog/2008/02 でフォローアップされています。 /18/IDisposableFinalizationAndConcurrency.aspx
これに関する多くの古いアドバイス ソースは、IDisposable が何らかの方法でファイナライザーにリンクされていることを暗示しています。このテーマに関する Herb Sutter のコメントに細心の注意を払ってください。IDisposable を実装する場合は、「クライアントが呼び出しを忘れた場合に Dispose が最終的に実行されるようにする」ために、ファイナライザーを記述する必要があるという結論に飛びつかないでください。これは一般的には当てはまりません。クラスは IDisposable を実装して、所有する管理対象オブジェクトに対してさまざまな呼び出しを行うことができます。たとえば、これらのオブジェクトを順番に破棄します。ファイナライザーは他の管理対象オブジェクトに確実にアクセスできないため、これをファイナライザーから行うことはまったく無意味です。また、ファイナライザーが行うことはすべて、任意のスレッドから呼び出せる必要があります。ファイナライザーは非常に目立たない高度なものですが、IDisposable はどこにでもあるはずの単純なパターンです。状況をさらに変化させます。
使い捨てオブジェクトでは常に using ステートメントを使用するように伝えます。
using (MyDisposable obj = new MyDisposable())
{
obj.some_stuff();
} //obj is disposed here
これが私のものです。:-)