IDisposable を適切に実装する
ユーザーから、コードベースに IDisposable を実装中にコード分析エラーが発生したと報告されました。問題を理解するために、提供されたコードを調べてみましょう。
public class User : IDisposable { // ... public void Dispose() { // Clear property values id = 0; name = String.Empty; pass = String.Empty; } }
エラー メッセージ CA1063 は、IDisposable の実装が正しくないことを示唆しています。 Microsoft のドキュメントによると、クラスがアンマネージ リソースまたは使い捨てオブジェクトへの参照を保持している場合にのみ、IDisposable を実装する必要があります。指定されたコード スニペットでは、宣言されたプロパティはどれも破棄する必要がありません。
この問題に対処するには、修正された実装は次のようになります。
public class User : IDisposable { // ... public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // In this case, there are no managed resources to dispose } // Also, there are no unmanaged resources to dispose } }
この実装は主に、保護されたプロパティの使用方法が異なります。 Dispose メソッドのキーワード。これにより、派生クラスのみが Dispose を使用できるようになります。クラス自体は使い捨て可能なリソースを保持しないため、Dispose メソッド内にクリーンアップ コードがないことは適切です。
以上がアンマネージド リソースが使用されていない場合に IDisposable を正しく実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。