C# - Kurucu ve Yıkıcı (Constructor Destructor)
Constructor (Yapıcı)
Constructor (kurucu), bir sınıfı yaratırken kullanılan özel yöntemlerdir. Bu üyeleri tanımlarken bir dönüş türü tanımlamanız gerekmez. Aşağıdaki şekilde tanımlanırlar:
public Esya()
Tabii ki, constructor lar da fonksiyonlar gibi overload (aşırı yüklenme) olabilir, yani class (sınıf) içinde birkaç constructor a sahip olabiliriz, ancak farklı parametrelere sahip olmalıdırlar.
Aşağıdaki örneği inceleyelim..
public Esya()
{
}
public Esya(string renk)
{
}
Bir constructor, birkaç durumda kullanışlı olabilecek başka bir constructor çağırabilir. İşte bir örnek:
string _renk;
public Esya()
{
Console.WriteLine("Parametresiz Const.");
}
public Esya(string renk) : this()
{
this._renk = renk;
Console.WriteLine("Parametreli Const.");
}
Yukardaki örnek kodda 2 tane constructor yarattık ve "public Esya(string renk) : this()" olan contructor ı çağırırsak ": this()" sayesinde ilk olarak kodun "public Esya()" olan constructora gittiği göreceksiniz. Bu yapı, varsayılan constructor olan "public Esya()" nın sınıf için çeşitli nesnelerin somutlaştırılması için kullanılabilir.
Her zaman ilk kullanmak istediğiniz constructor varsayılan olmayan, yani parametre alan bir constructor ise aynı durumu bu constructor için de kullanabilirsiniz.
Aşağıdaki kodu inceleyelim..
namespace ConstDeneme
{
class Program
{
static void Main(string[] args)
{
Esya masa = new ConstDeneme.Esya("Turuncu",10);
}
}
class Esya
{
string _renk;
int _hacim;
public Esya()
{
Console.WriteLine("Parametreli Const.");
}
public Esya(string renk) : this()
{
this._renk = renk;
Console.WriteLine("Parametreli Const.");
}
public Esya(string renk, int hacim) : this(renk)
{
this._hacim = hacim;
Console.WriteLine("2 Parametreli Const.");
}
}
}
Yukardaki örneği inceledeğimizde, "Esya" class ı 3 constructor a sahip. Parametresiz (varsayılan), tek parametreli ve 2 parametreli.. "masa" nesnesi yaratıldığında kod 2 parametreli olan constructor a gidecektir. "this(renk)" sayesinde o da tek parametreli constructor a gidecektir. "this()" sayesinde ise o da parametresiz olana gidecektir ve nesne bu 3 constructor a uğrayıp oluşacaktır.
Destructor (Yıkıcı)
C#' da "Garbage Collector" (çöp toplayıcı) yapısı vardır. Bunun amacı kullanılmayan nesnelerin etkisiz hale getirilmesini sağlamaktadır. Bazı durumlarda ise nesneleri kendimiz etkisiz hale getirmemiz (temizlememiz) gerekebilir. Bunun için destructor (yıkıcı) ları kullanırız.
"Esya" sınıfı için yaratılmış destructor örneğini görebilirsiniz..
~Esya()
{
Console.WriteLine("Nesne temizlendi..");
}
Nesne garbage collector (çöp toplayıcı) tarafından temizlendiğinde de, bu yöntem çağrılmaktadır. Fakat "~Esya()" olarak yarattığımızda kendimiz customize (kişiselleştirme) yapabiliriz.
Constructorlarda da aynı mantık vardır..Bir constructor veya destructor sınıf içinde yaratılmasa da aslında sistem tarafından yaratılır. Bunların class ta kod olarak yazılımcı tarafından yaratılmasının sebebi genellikle customize edileceği içindir.
Aşağıdaki örneği çalıştırdığınızda, "Esya" class ında bir constructor tanımlı olmasa da nesne yaratılır.
class Program
{
static void Main(string[] args)
{
Esya kitap = new ConstDeneme.Esya();
}
}
class Esya
{
string _renk;
int _hacim;
}