一般に、.Net フレームワークを使用して作成されたものはすべて管理対象リソースであると言えます。内部的には管理されていないリソースを使用する可能性がありますが、あなたの観点からは管理されています。これに対する例外の 1 つは、P/Invoke の場合です。.Net で動作する関数を作成しても、呼び出しは .Net の「サンドボックス」の外に渡されるため、管理されていないと見なされます。
@supercat への返信
有効期間の長いオブジェクトからのイベントは、完全に .net フレームワーク内で処理される場合がありますが、メモリ リークを防ぐために、管理されていないリソースと見なす必要があります。
ここには2つの別個のものがあると思います。マネージドとアンマネージドの議論があり、アプリケーションのメモリ管理の議論があります。一部のオブジェクトは、管理されていないかのように扱う必要がありますが、それはそれらが管理されていないという意味ではありません。たとえば、Brush
管理されていると見なすクラスですが、 を呼び出して管理されていないものとして扱う必要がありますDispose()
。クラス内に隠されている/抽象化されているのは、管理対象外のオブジェクトですDispose()
。しかしDispose()
、実際にはリソースを解放するわけではなく、開発者が正しく実装することを望む単なるパターンです。
さらに言えば、ほとんどのアンマネージ オブジェクトはCreateXYZ()
、ポインターを返す Win32 メソッドを呼び出すことによって作成されますが、同じポインターを受け取る「DestroyXYZ()/DeleteXYZ()」メソッドを使用して解放する必要があります。一方、マネージド オブジェクトは Dispose/Finalize を実装してこれを行います。繰り返しますが、管理対象リソースの作成者がこれを行っていることを願っていますが、保証はありません。