Aracılığıyla paylaş


Yıkıcı (C# Programlama Kılavuzu)

Yıkıcı, sınıfların örneklerini destruct için kullanılır.

Notlar

  • Yıkıcı yapılar tanımlanamaz.Yalnızca sınıfları ile kullanılırlar.

  • Bir sınıf, yalnızca bir yıkıcı olabilir.

  • Yıkıcı miras veya aşırı yüklü.

  • Yıkıcı çağrılamaz.Bunlar otomatik olarak çağrılır.

  • Bir yıkıcı değil değiştiriciler alabilir veya parametrelere sahiptir.

Örneğin, bir yıkıcı sınıf bildirimi aşağıdaki gibidir Car:

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

Yıkıcı dolaylı çağıran Finalize nesnesinin temel sınıfı.Bu nedenle, önceki yıkıcı kod örtülü olarak aşağıdaki koda çevrilir:

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

Yani Finalize yöntemi çağrılır yinelemeli olarak devralma zincirindeki tüm örnekleri için çoğu türetilmiş en az türetilen karşı.

[!NOT]

Boş yıkıcı kullanılmamalıdır.Bir sınıf bir yıkıcı içerdiğinde, bir girdi oluşturulur Finalize sıra.Yıkıcı çağrıldığında, çöp toplayıcı sıra işlemek için çağrılır.Yıkıcı boş ise, bu yalnızca gereksiz bir performans kaybı olur.

Çöp toplayıcı tarafından belirlendiği için yıkıcı çağrıldığında Programcı üzerinde denetimi yoktur.Çöp toplayıcı uygulama tarafından artık kullanılmayan nesneleri arar.Bir nesneyi imha için uygun bulduğu, yıkıcı (varsa) çağırır ve nesnenin depolamak için kullanılan bellek biçimiyleilgili.Çıkarken yıkıcı olarak da bilinir.

Çöp toplama çağırarak zorlamak mümkündür Collect, ancak performans sorunlarına sebep olabilir çünkü çoğu zaman, bu kaçınılmalıdır.

Yıkıcı yayın kaynakları için kullanma

Genel olarak, C# çalışma zamanını çöp toplama ile bir dil ile geliştirirken, gerektiği kadar bellek yönetimi gerektirmez.Nedeni budur.net Framework Çöp toplayıcı, ayırma ve nesneleriniz için bellek sürümü örtülü olarak yönetir.Ancak, uygulamanız windows, dosyaları ve ağ bağlantıları gibi yönetilmeyen kaynakları Kapsüller, kaynakları boşaltmak için yıkıcı kullanmanız gerekir.Nesne imha için uygun olduğunda, çöp toplayıcısını çalıştırır Finalize nesne yöntemi.

Açık kaynak sürümü

Uygulamanızın pahalı bir dış kaynak kullanıyor olsa da, açıkça Çöp toplayıcı nesnesi serbest bırakmalar önce kaynağı serbest bırakmak için bir yol sağlaması da öneririz.Uygulayarak bunu bir Dispose yönteminden IDisposable nesne için gerekli temizleme gerçekleştirir arabirimi.Bu uygulamanın performansını önemli ölçüde iyileştirebilir.Bile bu açık denetime kaynaklar, yıkıcı, kaynakları temizlemek için bir koruma olur çağrısı Dispose yöntemi başarısız oldu.

Kaynakları temizleme hakkında daha fazla bilgi için aşağıdaki konulara bakın:

Örnek

Aşağıdaki örnek, bir miras zinciri oluşturan üç sınıfı oluşturur.Sınıf First temel sınıftır, Second türetilir First, ve Third türetilir Second.Tüm üç yıkıcı vardır.De Main(), çoğu türetilmiş sınıf örneği oluşturulur.Program çalýþýnca üç sınıfları için yıkıcı çoğu türetilmiş en az türetilen karşı otomatik olarak ve sırasıyla'ı denir dikkat edin.

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.
*/

C# dil belirtiminin

Daha fazla bilgi için bkz: C# dil belirtiminin. Dil belirtimi, C# sözdizimi ve kullanımı için nihai kaynaktır.

Ayrıca bkz.

Başvuru

Kurucular (C# Programlama Kılavuzu)

IDisposable

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

Çöp Toplama