Udostępnij za pośrednictwem


Destruktory (Podręcznik programowania C#)

Destruktory są używane do wystąpienia klasy destruct.

Uwagi

  • Nie można zdefiniować destruktory w strukturach.Są one używane tylko z klas.

  • Klasa może mieć tylko jeden destruktor.

  • Destruktory nie mogą być dziedziczone ani przeciążone.

  • Nie można wywołać destruktorów.Są one wywoływane automatycznie.

  • Destruktora podjąć modyfikatorów lub nie mają parametrów.

Na przykład, następujące jest deklaracja destruktora klasy Car:

class Car
{
    ~Car()  // destructor
    {
        // cleanup statements...
    }
}

Destruktor niejawnie wywołuje Finalize w klasie bazowej obiektu.W związku z tym poprzedniego kodu destruktora niejawnie jest tłumaczony na następujący kod:

protected override void Finalize()
{
    try
    {
        // Cleanup statements...
    }
    finally
    {
        base.Finalize();
    }
}

Oznacza to, że Finalize wywoływana jest metoda rekursywnie wszystkie wystąpienia w łańcuchu dziedziczenia z większości pochodnych pochodnym najmniej.

[!UWAGA]

Nie powinno służyć destruktory puste.Gdy klasa zawiera destruktor, tworzony jest zapis w Finalize kolejki.Wywołanie destruktora garbage collector jest wywoływany przetwarzanie kolejki.Jeśli destruktor jest pusta, powoduje to po prostu niepotrzebnej utraty wydajności.

Programista ma kontroli nad, gdy wywoływana jest destruktor, ponieważ jest to ustalone przez garbage collector.Garbage collector sprawdza, czy obiekty nie są już używane przez aplikację.Jeżeli Komisja uzna obiektu kwalifikujących się do zniszczenia, wywołuje destruktor (jeśli ma zastosowanie) i ta pamięć używaną do przechowywania obiektu.Program zamyka również nazywane są destruktory.

Jest możliwe wymusić wyrzucania elementów bezużytecznych, wywołując Collect, ale w większości przypadków, to należy unikać, ponieważ może on utworzyć problemy z wydajnością.

Za pomocą destruktory do wydania zasobów

Ogólnie rzecz biorąc C# nie wymaga zarządzania jak najwięcej pamięci, w razie potrzeby, podczas opracowywania z językiem, który nie ma runtime z kolekcji garbage.Wynika to z.NET Framework garbage collector zarządza niejawnie alokacji i zwalniania pamięci dla obiektów.Jednakże gdy aplikacja hermetyzuje niezarządzanych zasobów, takich jak windows, pliki i połączenia sieciowe, należy używać destruktory zwolnić z tych zasobów.Gdy obiekt jest kwalifikujących się do zniszczenia, tbody Finalize metody obiektu.

Wyraźne zwolnienie zasobów

Jeśli aplikacja korzysta z droższego zasobu zewnętrznego, firma Microsoft zaleca także że zapewniają sposób jawnie zwolnić zasób przed garbage collector zwalnia obiektu.Aby to zrobić, wykonawczych Dispose metodę z IDisposable interfejs, który wykonuje niezbędne oczyszczania dla obiektu.Może to znacznie zwiększyć wydajność aplikacji.Nawet przy tym jawne kontrolę nad zasobami destruktor staje się ochronne, aby oczyścić zasoby, jeśli wywołanie Dispose metody nie powiodło się.

Więcej szczegółów dotyczących czyszczenie zasobów zobacz następujące tematy:

Przykład

Poniższy przykład tworzy trzy klasy, które w łańcuchu dziedziczenia.Klasa First jest klasą bazową, Second jest pochodną First, i Third jest pochodną Second.Wszystkie trzy zostały destruktory.W Main(), tworzone jest wystąpienie klasy pochodzące od większości.Po uruchomieniu tego programu, należy zauważyć, że destruktory dla trzech klas są nazywane automatycznie i w kolejności od najbardziej pochodnych pochodnym najmniej.

class First
{
    ~First()
    {
        System.Diagnostics.Trace.WriteLine("First's destructor is called.");
    }
}

class Second : First
{
    ~Second()
    {
        System.Diagnostics.Trace.WriteLine("Second's destructor is called.");
    }
}

class Third : Second
{
    ~Third()
    {
        System.Diagnostics.Trace.WriteLine("Third's destructor is called.");
    }
}

class TestDestructors
{
    static void Main()
    {
        Third t = new Third();
    }

}
/* Output (to VS Output Window):
    Third's destructor is called.
    Second's destructor is called.
    First's destructor is called.
*/

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.

Zobacz też

Informacje

Konstruktory (Podręcznik programowania C#)

IDisposable

Koncepcje

Podręcznik programowania C#

Inne zasoby

Wyrzucanie elementów bezużytecznych