12.07.2015 Views

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C# UYGULAMALARI TEMELDispose Kalıbı <strong>ve</strong> IDisposable Arayüzü: C# da bitiş fonksiyonu çöp toplayıcı <strong>tarafından</strong> nesnebellekten silinmeden hemen önce çağrılır. Bitiş fonksiyonlarının isimleri ~ biçimdedir.Sınıfın tek bir bitiş fonksiyonu <strong>bu</strong>lunabilir. Sıfır parametresi olmak zorundadır. Bitiş fonksiyonukavramı işleyiş <strong>ve</strong> isim olarak C++ dan aktarılmıştır. Fakat C++ da bitiş fonksiyonlarıdeterministiktir. Yani bitiş fonksiyonlarının hangi noktada çağrılacağı kesinlikle bilinmektedir.Fakat C# daki bitiş fonksiyonları deterministik değildir. Yani nesne seçilebilir duruma geldiktensonra tam olarak nesnenin ne zaman silineceği dolayısıyla bitiş fonksiyonunun çağrılacağı öncedenbelli değildir. Bu nedenle C# da bitiş fonksiyonları C++ daki kadar yoğun kullanılmamaktadır.Bazen sınıfın başlangıç fonksiyonu içinde kritik bazı kaynaklar tahsis edilmiş olabilir. Referansınkullanımı bittikten sonra ya da belirli bir noktada <strong>bu</strong> kaynakların boşaltılması gerekebilir. Bu türboşaltımların bitiş fonksiyonu içinde yapılması <strong>ve</strong> bitiş fonksiyonuna bırakılması iyi bir teknikdeğildir. İşte <strong>bu</strong> yüzden IDisposable arayüzü düşünülmüştür. IDisposable arayüzü tek birfonksiyona sahiptir.interface IDisposable{void Dispose();}Eğer bir sınıf ya da yapı IDisposable arayüzünü destekliyorsa o sınıf ya da yapının bir Disposefonksiyonu vardır <strong>ve</strong> <strong>bu</strong> fonksiyon gerekli olan boşaltım işlemlerini yapmaktadır. O halde biz böylebir sınıf ya da yapıyı kullanıyorsak işimiz bitince Dispose fonksiyonunu çağırmalyız. GenellikleIDisposable arayüzünü destekleyen sınıflarda <strong>ve</strong> yapılarda tasarımcı bir bitiş fonksiyonu dayazmıştır <strong>ve</strong> bitiş fonksiyonunda da boşaltımı yapmıştır. Bu nedenle programcı Dispose işleminibilinçli olarak yapabilir. Kaynaklar bitiş fonksiyonu sayesinde <strong>ve</strong> çöp toplayıcı sayesinde iadeedilecektir.Fakat kaynak boşaltımının bazı önemli ayrıntıları vardır. Kaynaklar “managed”, “unmanaged”olmak üzere iki kısma ayrılmaktadır. Unmanaged kaynaklar işletim <strong>sistem</strong>i düzeyinde CLR ninkontrolü dışında tahsis edilmiş kaynaklardır. Bu tür kaynaklar <strong>sistem</strong> fonksiyonları ya da APIfonksiyonları çağrılarak tahsis edilmektedir. Managed kaynaklar CLR nin kontrolü altındakikaynaklardır. Bir sınıfın başkabir sınıfı kullanması durumunda kullanılan kaynaklar managedkaynaklardır.Örneğin bir B sınıfı bir A sınıfı türünden bir nesneyi yaratarak kullanıyor olsun birde doğrudan APIfonksiyonları çağırarak tahsis ettiği unmanaged kaynakları kullanıyor olsun. Şimdi biz B sınıfıtüründen nesnenin boşaltılması işleminde iki şeyden sorumluyuz. Birincisi unmanaged kaynaklarınboşaltılması ikincisi A sınıfına ilişkin tahsis edilmiş nesnenin yani managed kaynaklarınboşaltılmasıdır..net ordamında bir sının başka bir sınıfı içermesi durumunda içeren sınıf nesnesi seçilebilir durumageldiğinde çoğu kez içerilen nesne de secilebilir duruma gelmektedir.class A{//...}class B{private A m_a;1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!