C# IDisposable ne değildir

Bilindiği üzere .Net Garbage Collection özelliği kullanarak arka planda kullanılmayan öğeleri toplayıp yok eden bir özellik kullanmakta.
Birçok native programlama dilinde bu işi programcı kendisi yapmaktadır. Mesela delphi için object.Free() veya FreeAndNil(object) ya da object.Destroy() gibi metodlarla bellek geri kazanılmakta idi.

Peki o zaman IDisposable ne işe yarıyor. IDisposable obje; Garbage Collector tarafından toplanıncaya kadar bellekte dururken, programcıya bir ön temizlik imkanı sunar, ya da programcıya obje ölüm döşeğinde iken yakınlarıyla vedalaştırma şansı verir. Bu amcasoğlu Dbcontext olabilir, teyzesi TCPClient olabilir ya da kuzeni StreamWriter olabilir.

 

Peki IDisposable ne değildir?!

Kesinlikle FreeAndNil, Free, Destroy değildir. Yani obje hala oralarda bir yerlerdedir.

public class Dava : IDisposable {
	private string msg = "Allah'ın dünyasında O'nun dediği olmalı";
	public string Haykir()
	{
		return msg;
	}
	public void Dispose() {
		msg = "Onlar ağızlarıyla Allah'ın nurunu söndürmek istiyorlar. Halbuki kafirler istemese de Allah, nurunu tamamlayacaktır!";
	}
}
public class Tevhid {
	private static Dava dava = new Dava();
	public static Dava getInstance() {
		return dava;
	}
}
//using deyimini bilmeyen derhal bu makaleyi terk etsin!
using (var dava = Tevhid.getInstance()) {
	Console.WriteLine(dava.Haykir());
}
//Out: Allah'ın dünyasında O'nun dediği olmalı
Console.WriteLine(Tevhid.getInstance().Haykir());
//Out: Onlar ağızlarıyla Allah'ın nurunu söndürmek istiyorlar. Halbuki kafirler istemese de Allah, nurunu tamamlayacaktır!
 

Görüleceği üzere; eğer bu bir Delphi veya C++ objesi olsaydı ve Free metodu çağrılmış olsaydı

Console.WriteLine(Tevhid.getInstance().Haykir());

satırında zılgıtı yerdik. Oysa obje Dispose metodundaki son güncellemesi ile gayet güzel çalışmaktadır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir