Yapıcı (Constructor) Nedir?Beğendin
Nesne yönelimli programlama konseptinde yapıcı (constructor), temel öğelerden biridir. Nesnenin yaratılma aşamasında çalışacak olan fonksiyonu tanımlar. Yapıcı, tanımlamadığınız takdirde varsayılan olarak ara seviyede oluşturulacaktır.
public class Car
{
private int velocity;
private int gear;
private EngineStatus engineStatus;
public Car()
{
velocity = 0;
gear = 1;
engineStatus = EngineStatus.Stopped;
}
}
Yukarıdaki örnekte, aracın motoru çalışmayan vaziyette, birinci viteste ve hareketsiz olarak oluşturulacaktır.
Yapıcı, aşırı yükleme (overloading) özelliğine sahiptir. Ayrıca farklı erişim belirleyiciler (access modifier) ile tanımlanabilir. Aşağıdaki örnekte sınıfa ikinci bir yapıcı izi daha eklenmiştir. Buna göre araç nesnesi, sadece aynı kütüphane içerisinden (internal) erişilmek suretiyle, motor durumu belirtilerek de oluşturulabilir.
public class Car
{
private int velocity;
private int gear;
private EngineStatus engineStatus;
public Car()
{
velocity = 0;
gear = 1;
engineStatus = EngineStatus.Stopped;
}
internal Car(EngineStatus initialEngineStatus)
{
velocity = 0;
gear = 1;
engineStatus = initialEngineStatus;
}
}
Basitçe yukarıdaki gibi anlatabileceğimiz yapıcılar, statik olarak da tanımlanabilir. Statik yapıcılar, bu sınıftan üretilen nesnelerin sayısından bağımsız olarak, sadece ilk nesne üretiminde bir kez çalışırlar. Genellikle, sınıfa ait statik alanlar mevcut ise, bu alanları tanımlamak için statik yapıcılar kullanılır. Aşağıdaki örnekte, ilk araç üretilen zamanı belirlemek için statik yapıcı kullanılmıştır.
public class Car
{
private int velocity;
private int gear;
private EngineStatus engineStatus;
private static readonly DateTime firstCarProduced;
static Car()
{
firstCarProduced = DateTime.Now;
}
public Car()
{
velocity = 0;
gear = 1;
engineStatus = EngineStatus.Stopped;
}
internal Car(EngineStatus initialEngineStatus)
{
velocity = 0;
gear = 1;
engineStatus = initialEngineStatus;
}
}
Nesnenin olmazsa olmazlarından olan yapıcılar, tasarım aşamasında erişim belirleyiciler ve aşırı yüklemeler açısından nesnenin gerçek hayattaki doğasına uygun şekilde tasarlanmalıdır.