ホームページ >バックエンド開発 >C++ >C# で IDisposable を正しく実装するにはどうすればよいですか?

C# で IDisposable を正しく実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 20:04:42182ブラウズ

How Should I Correctly Implement IDisposable in C#?

IDisposable の適切な実装

コード分析ツールでは、User クラスに IDisposable を正しく実装するように求められます。このエラーは、IDisposable が正しく実装されていない場合に発生します。 CA1063 エラー メッセージは、Dispose(bool) のオーバーライド可能な実装を提供するか、型をシール済みとしてマークすることを特にアドバイスします。

IDisposable について

Disposable は、.NET のインターフェイスです。管理されていないリソースを解放するオブジェクトの能力を表します。アンマネージド リソースは通常、ファイル ハンドルやデータベース接続などの非 CLR コンポーネントです。 IDisposable を実装すると、これらのリソースを適切にクリーンアップして解放できます。

正しい実装

IDisposable を実装するための推奨アプローチは次のとおりです。

  • Dispose() メソッドを宣言します: このメソッドは次のとおりです。 public にして IDisposable インターフェイスを実装します。
  • Implement Dispose(bool disposing): この保護された仮想メソッドは、ブール値引数 (disposing) を受け取り、マネージドかマネージドの両方を示すオーバーライド可能な実装です。
  • マネージド リソースを Dispose(bool) で破棄します。 disposing): Dispose(bool disposing) 実装内で、条件ステートメントを使用して、disposing が true (マネージド リソースのみ) か false (ネイティブ リソースのみ) かを決定します。
  • ベースを呼び出します。派生クラスの Dispose(disposing): IDisposable 基本クラスから派生するクラスでは、Dispose(bool disposing) をオーバーライドして呼び出します。リソースが正しく解放されていることを確認するためのbase.Dispose(disposing)。

コードへの適用

特定のケースでは、使用されているアンマネージド リソースはありません。ユーザークラスで。したがって、アンマネージド リソースの処理を必要とする機能を追加する場合を除き、IDisposable を実装する必要はありません。

コードに IDisposable を正しく実装する方法の例を以下に示します。

public class User : IDisposable
{
    // ...

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

    protected virtual void Dispose(bool disposing)
    {
        if (disposing) 
        {
            // No managed resources to dispose
        }
        // No native resources to dispose
    }

    // ...
}

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

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