正しい方法で破棄する: 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 サイトの他の関連記事を参照してください。