3

C# クラスに関する最初のレッスン以来、クラスのFinalize()メソッドを明示的に呼び出すことができない (ガベージ コレクターによって呼び出される) だけでなく、それをカスタム クラスに実装することさえ許可されていないことを学びました。
私を少し混乱させるのは、MSDNのようにここにあるということです-

By default, the Object.Finalize method does nothing. If you want the garbage collector to perform cleanup operations on your object before it reclaims the object's memory, you must override this method in your class.

他の何かを示唆する多くの場所を見つけました。その理由を明確にできる人はいますか?

4

1 に答える 1

3

同じMSDNページで読むことができます:

C#または C++ プログラミング言語で Finalize メソッドをオーバーライドすることはできません。C# では、デストラクタ構文を使用して Finalize メソッドを実装します。.NET Framework のバージョン 2.0 では、Visual C++ のデストラクターとファイナライザーで説明されているように、C++ は Finalize メソッドを実装するための独自の構文を提供します。以前のバージョンでは、C++ は C# と同様に Finalize メソッドにデストラクタ構文を使用していました。

これは、Finalize()メソッドがガベージ コレクターによって呼び出されるものであることを意味しますが、デストラクタの使いやすい構文によって隠されています。as と書くと、コンパイラによってClassName.~ClassName()as に書き換えられます。ClassName.Finalize()

編集
ポイントを明確にするために、これは C# でファイナライザーを実装する実際の構文です。

class MyClass
{
    ~MyClass()
    {
    }
}

通常、ファイナライザー メソッドを実装する必要さえありません (パフォーマンスが低下する可能性さえあります) が、Dispose パターンを実装します。

于 2012-07-17T07:56:34.700 に答える