1

Konu: c#. close mu dispose mu?

Formları kapatırken close() diyordum ben.
Bir yerde dispose ile kapattıklarını gördüm.

Farkı nedir? Hangisini kullanmalıyız?

2 Son düzenleyen, ugurlu2001 (29.06.2007 15:00:46)

Re: c#. close mu dispose mu?

07.03.06 SALI
.NET?te KULLANILAN BAZI ÖNEMLİ ARAYÜZLER
Idisposable Arayüzü
Bu arayüz system alanındadır tek bir fonksiyona sahiptir.
Public interface Idisposable
{
void Dispose();
}

Herhangibir sınıf idisposable arayüzünü destekliyorsa dispose isimli bir fonksiyonu vardır . Dispose fonksiyonu bitiş fonksiyonu (destructor) ile yapılmak istenen şeylerin daha deterministik olarak yapılmasını sağlamaktadır. Bitiş fonksiyonu ismi sınıf ismiyle aynı olan fakat başına tilda(~) getirilmiş fonksiyondur.Tıpkı başlangıç fonksiyonu gibi  geri dönüş kavramına sahip değildir ve erişim belirleyici anahtar sözcüğü sahip değildir.

class Sample
    {
        public Sample()
        {
            Console.WriteLine("Test constuctor");
        }
        ~Sample()
        {
            Console.WriteLine("Destructor");
        }
    }
Sınıfın bitiş fonksiyonu çöp toplayıcı tarafından nesne seçilebilir hale geldikten sonra heapten silinmeden az önce çağrılmaktadır.
Yapıların bitiş fonksiyonu olamaz çünkü yapılar stacte yaratılmaktadır.
Maalesef c#?ta bitiş fonksiyonu deterministik bir fonksiyon değildir . Ne zaman çağrılacağı kesin olarak belli değildir. Üstelik hiç çağrılmaya bilir de . Bu nedenle sınıfların tahsis ettiği kaynakların bitiş fonksiyonu ile geri bırakılması iyi bir teknik değildir . Üstelik .Net ortamında çöp toplayıcının nesneleri hangi sırada sileyeceği de kesin olarak belirlenmemiştir. Yani bir sınıfın veri elemanı başka bir sınıf türünden referans ise eleman olan nesnenin mi yoksa elemana sahip nesnenin mi daha önce boşaltılacağı belirsizdir. Bu durum bitiş fonksiyonlarının kullanımlarını hepten kısıtlamaktadır .

İşte sınıflar için boşaltım işlemleri sınıfın bir üye fonksiyonuna yaptırılmalıdır bu fonksiyonu da nesneyi kullanan kişi çağırmalıdır . Dispose isimli fonksiyon bu görevi yerine getirmek için düşünülmüştür . Bir sınıf Idisposable arayüzünü destekliyorsa boşaltılmaı gereken çeşitli kaynakları vardır . Bu sınıfı kullanan kişi de dispose fonksiyonunu çağırmalıdır .

Dispose fonksiyonu çok biçimli özellik taşıdığına göre türünü bilmediğimiz nesneleri boşaltmakta da kulanılabilir .
Örneğin:
ArrayList a = new ArrayList()

Foreach(IDispose i in a)
i.Dispose();
Burada arraylist nesne tutan sınıfının içerisinde idisposable arayüzünü destekleyen çeşitli farklı sınıflar türünden nesneler olsun türünü bilmeden boşaltabiliriz.

*/  www.csystem.org /*  Kaan Aslan Ders Notu...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: c#. close mu dispose mu?

Yani dispose kullanma mı demek oluyor bu smile

4

Re: c#. close mu dispose mu?

Aksine Kullanın demek oluyor smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü