デストラクタとクラス内のFinalizeメソッドの間に違いがありますか?C#では、クラスのデストラクタとFinalizeメソッドの違いは何ですか?
私は最近、Visual Studio 2008ではFinalizeメソッドと同義のデストラクタを考慮しました。つまり、Visual Studioではクラス内で両方のメソッドを同時に定義することはできません。
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
デストラクタに完成させるためにコールに次のエラーを与える:たとえば、以下のコードフラグメントは
完成させるために呼び出しがコメントアウトされている場合
The call is ambiguous between the following methods or properties: 'TestFinalize.~TestFinalize()' and 'TestFinalize.Finalize()'
そして、それは次のエラーが発生します。
Type 'ManagementConcepts.Service.TestFinalize' already defines a member called 'Finalize' with the same parameter types
'管理していないリソースをクリーンアップするためのFinalizeメソッドのみを実装する必要があります:Finalizeに入れます。 Disposeと同じですか? – hqt
@ hqt:ファイナライザを実装すべき場所よりも「Dispose」を大幅に上回らなければならないケースをはるかに上回ります。クラスまたは派生クラスのインスタンスがアンマネージリソースを直接所有するか、直接アンマネージリソースを直接所有するかを直接所有するか、直接最後のものを直接所有する可能性が高い場合は、Disposeを実装します自分のクラスがの場合は、直接がアンマネージリソースを所有していて、それ以外のものはほとんどありません。 - はるかに狭いシナリオです。 – supercat
@hqt:クラスが直接アンマネージリソースを所有し、他のオブジェクトへの参照を保持している場合、アンマネージドリソースは一般に、自分自身のファイナライズ可能なクラスに分割する必要があります。他のオブジェクトへの参照を保持するクラスは、リソース自体を所有するのではなく、「管理されていないリソースを直接所有するもの」を所有するだけで、ファイナライザは必要ありません。 – supercat