Part 4 Constructor ve Destructor

Constructor, bir nesne oluşturulurken ilk olarak tetiklenen metottur ve Türkçe’de ‘yapıcı metot’ olarak çevrilir. Bir nesne oluşturulurken, constructor metot çağrılır.

Constructor metodu nasıl oluşturulur?

Constructor, özel bir sınıf elemanıdır. Ancak doğası gereği bir metottur. Diğer metot imzalarından biraz farklıdır.

  • Metot adı, sınıf adıyla aynı olmalıdır. (Özel sınıf elemanlarının dışında hiçbir üye, sınıf adıyla aynı olamaz!)
  • Dönüş değeri olmaz veya belirtilmez.
  • Erişim belirteci genellikle ‘public’ olmalıdır. (Özel durumlarda ‘private’ kullanılabilir.)
Constructor Örneği

Default Constuctor

Her sınıfın içinde varsayılan bir constructor bulunur. Eğer biz bir constructor tanımlamazsak, derleyici varsayılan bir constructor oluşturur. Ancak, biz bir constructor tanımladığımızda, varsayılan olanı ezerek kendi tanımladığımız constructor kullanılır.

class Araba
{
  // field ...
   
  // default constructor duzenleme
  public Araba()
  {
    
  }
} 

Parametreli Constuctor

parametreli constructor’lar, bir sınıfın nesnesini oluştururken belirli parametrelerin kullanılmasına izin veren özel constructor’lardır. Bu constructor’lar, sınıfın farklı durumlarda farklı başlangıç durumlarına sahip olmasını sağlar. Parametreli constructor’lar, sınıfın özelliklerine başlangıç değerlerini atamak için kullanılır ve nesne oluşturulurken bu değerlerin belirtilmesini gerektirir.

class Araba
{
   public string Marka;
   public string Model;
   public int Yil;   
   
  // Parametreli constructor
  public Araba(string marka, string model, int yil)
  {
    Marka = marka;
    Model = model;
    Yil = yil;
  }
} 

Bu örnekte, “Araba” sınıfına bir parametreli constructor eklenmiştir. Bu constructor, araba nesnesi oluşturulurken “marka”, “model” ve “yıl” parametrelerini alır ve bu parametreleri sınıfın özelliklerine atar. Bu sayede, bir araba nesnesi oluşturulurken bu özelliklerin belirtilmesi zorunlu hale gelir.

overload nedir?


Overloading, bir sınıf içinde aynı isme sahip ancak farklı parametreler veya parametre sayılarına sahip birden fazla metotun tanımlanmasıdır. Bu, aynı isimle farklı işlevlere sahip metotların aynı sınıf içinde bulunmasını sağlar. Aynı şekilde, constructor’lar da aynı isimle farklı parametrelerle birden fazla kez tanımlanabilirler. Bu durumda, her bir constructor farklı başlangıç durumlarını belirtmek için kullanılır.

C#
class Araba
{
   public string Marka;
   public string Model;
   public int Yil;   
   
  // Parametreli constructor
  public Araba(string marka, string model, int yil)
  {
    Marka = marka;
    Model = model;
    Yil = yil;
  }
  // constructor overload örnek
  public Araba(string marka, string model)
  {
    Marka = marka;
    Model = model;
    Yil = 2024;
  }
  // constructor overload örnek 
  public Araba(string marka)
  {
    Marka = marka;
    Model = "Standart";
    Yil = 2024;
  }
} 

Constructor’ın erişim belirleyicisi private olursa ne olur?


Eğer bir constructor’ın erişim belirleyicisi private olarak ayarlanırsa, ilgili sınıftan nesne oluşturulması engellenmiş olur. Bu, o sınıfın dışından bu constructor’ı kullanarak yeni nesneler oluşturulmasını imkansız hale getirir.

Private constructor’lar, genellikle sınıfın dışındaki kodun belirli koşullar altında nesne oluşturmasını önlemek veya sınıfın tekil bir örneğini (singleton pattern gibi) kontrol altında tutmak için kullanılır.

this keywordüyle constructor arası geçiş kullanımı

“this” anahtar kelimesi, C# programlama dilinde bir nesnenin kendi kendisini referans almasını sağlar. Constructor’lar arasında geçiş yaparken “this” anahtar kelimesi, aynı sınıf içindeki farklı constructor’ları çağırmak için kullanılır. Bu, kod tekrarını azaltır ve sınıf içindeki constructor’ları daha esnek hale getirir.

Özellikle, bir sınıf içindeki bir constructor, farklı parametrelerle aynı sınıf içindeki başka bir constructor’ı çağırırken “this” kullanılır. Bu durumda, constructor overload’larını uygularken daha temiz bir kod yazılmasına olanak tanır.

Destructor Nedir?

Destructor, bir sınıftan üretilmiş olan nesnenin imha edilmesi (bellekten silinmesi) sırasında otomatik olarak çağrılan bir metottur. Nesnenin ömrü sona erdiğinde, destructor en son tetiklenen metottur.

C# programlama dilinde destructor, sadece bir sınıf içinde kullanılabilir ve bu sınıf sadece bir tane destructor içerebilir.

Bir nesnenin ne zaman ve kim tarafından imha edileceği şu şartlara bağlıdır:

  1. İlgili nesne herhangi bir referans tarafından işaretlenmemiş olmalıdır.
  2. Nesnenin oluşturulduğu ve kullanıldığı kapsam (scope) sona ermiş olmalıdır. Yani, ilgili nesneye bir daha erişilemez hale gelinmelidir.

Bu şartlar sağlandığında, Garbage Collector (Çöp Toplayıcı) tarafından nesne imha edilir.

Garbage Collector

Garbage Collector (Çöp Toplayıcı), uygulamada gereksiz olan nesneleri toplamak için devreye giren bir mekanizmadır.

Aslında, Garbage Collector C#’da bellek optimizasyonunu üstlenen bir yapıdır.

C#’da Garbage Collector’ın ne zaman çalışacağı tahmin edilemez. Kendi algoritması doğrultusunda çalışır.

Dolayısıyla, geliştiricilerin bu mekanizmaya müdahale etmesi önerilmez

Destructor tanımlama Kuralları

Destructor tanımlama Kuralları
Constructor ve Destructor örneği

Static Constructor


C# programlama dilinde, bir sınıfın static constructor’ı (statik yapıcı metot), sınıfın ilk kez kullanıldığı zaman otomatik olarak çağrılan bir özel constructor’dır. Static constructor, static üyelerin ilk değerlerini ayarlamak veya başlangıç ayarlarını yapmak gibi işlemleri gerçekleştirmek için kullanılır.

Static constructor, bir sınıfın yalnızca bir defa çalıştırılmasını garanti eder ve bu constructor’ı çağırırken nesne oluşturmaya gerek yoktur. Genellikle, sınıfın static üyelerine başlangıç değerleri atanır veya sınıfın ilk kez kullanıldığı zaman yapılması gereken işlemler bu constructor içinde gerçekleştirilir.

static constructor örneği

4 Yorumlar

Ahmethan için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir