ホームページ >バックエンド開発 >C++ >C# で IDisposable を実装する必要があるのはどのような場合ですか?

C# で IDisposable を実装する必要があるのはどのような場合ですか?

DDD
DDDオリジナル
2025-01-04 02:35:42843ブラウズ

When Should You Implement IDisposable in C#?

正しい方法で破棄する: IDisposable の実装

IDisposable を実装すると、管理対象外のリソースと使い捨てアイテムを決定的に解放できます。コード スニペットでは、User クラスはアンマネージ リソースや使い捨ての参照を処理しないため、破棄する必要はありません。これは、クラスをシール済みとしてマークし、派生クラスによる IDisposable のオーバーライドを効果的に防止することで解決できます。

より詳細な例として、アンマネージ リソース (ファイル ハンドルなど) と IDisposable の両方を管理する ResourceManager というクラスを考えてみましょう。参照 (データベース接続など)。

アンマネージドでの IDisposable の使用リソース:

public class ResourceManager : IDisposable
{
    private FileStream fileStream;

    public ResourceManager()
    {
        // Allocate and open the file handle
        fileStream = new FileStream("myfile.txt", FileMode.Open);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Free managed resources
            fileStream?.Close();
            fileStream?.Dispose();
        }
        // Free native resources
        fileStream.Dispose();
    }
}

使い捨て参照での IDisposable の使用:

public class ResourceManager : IDisposable
{
    private DisposableReference reference;

    public ResourceManager()
    {
        // Obtain the disposable reference
        reference = new DisposableReference();
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Free managed resources
            reference?.Dispose();
        }
    }
}

以上がC# で IDisposable を実装する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。