私はいくつかのコードを見ていますが、次のステートメントがあります。
~ConnectionManager()
{
Dispose(false);
}
クラスはIDisposable
インターフェイスを実装していますが、それがチルダ(~)が使用されているものの一部であるかどうかはわかりません。
~ はデストラクタです
ファイナライズ
C# では、Finalize メソッドは、標準の C++ デストラクターが実行する操作を実行します。C# では、Finalize という名前を付けません。クラス名の前にチルダ ( ~ ) 記号を配置する C++ デストラクタ構文を使用します。
廃棄
クラスのユーザーが明示的に呼び出すことができるClose()
orメソッド内のオブジェクトを破棄することをお勧めします。Dispose()
Finalize (デストラクタ) は GC によって呼び出されます。
IDisposableインターフェイスは、破棄する必要のあるリソースをクラスが保持していることを世界に伝え、ユーザーにリソースを解放する方法を提供します。クラスにファイナライザーを実装する必要がある場合は、Dispose メソッドでメソッドを使用してGC.SuppressFinalize()
、インスタンスのファイナライズが抑制されるようにする必要があります。
何を使う?
デストラクタを明示的に呼び出すことは合法ではありません。デストラクタはガベージ コレクタによって呼び出されます。貴重なアンマネージ リソース (ファイル ハンドルなど) を処理して、できるだけ早く閉じて破棄したい場合は、IDisposable インターフェイスを実装する必要があります。
これはファイナライザーです。正直なところ、ファイナライザーを記述する必要はほとんどありません。次の場合は、実際に 1 つだけ記述する必要があります。
IntPtr
でき、使用できないためSafeHandle
、より簡単になりますIDisposable
封印されていないクラスに実装しています。(私の好みは、クラスが継承用に設計されていない限り、封印することです。) そのような場合、ファイナライザーは正規の Dispose パターンの一部です。クラスのデストラクタを示すために使用されます。
C++ と同じ、デストラクタです。ただし、C# では明示的に呼び出しません。ガベージ コレクターによってオブジェクトが収集されたときに呼び出されます。
デストラクタ (C# プログラミング ガイド)を参照してください。ただし、C++ とは異なり、デストラクタが呼び出されるタイミングはガベージ コレクタによって決定されるため、プログラマは制御できないことに注意してください。
~ は通常、デコンストラクタを表します。オブジェクトが死ぬ直前に実行されます。