Yükleniyor...

Yapıcılar ve Yıkıcılar

Yapıcılar (Constructors) ve Yıkıcılar (Destructors) C# programlamada nesne yaşam döngüsünü yönetmek için kritik öneme sahiptir. Bir yapıcı, bir sınıftan nesne oluşturulduğunda otomatik olarak çağrılan özel bir metottur ve nesnenin başlangıç değerlerini güvenli bir şekilde atamak için kullanılır. Yıkıcı ise nesne artık kullanılmayacak durumda olduğunda, Garbage Collector tarafından çağrılan bir metottur ve özellikle yönetilmeyen kaynakları (dosyalar, ağ bağlantıları, veritabanı bağlantıları) temizlemek için kullanılır.
Yapıcı ve yıkıcı kullanımı, yüksek performanslı ve güvenilir uygulamalar geliştirmek için gereklidir. Yapıcılar sayesinde nesneler, uygulamanın geri kalanında kullanılmadan önce geçerli ve doğru durumdadır. Yıkıcılar ve IDisposable arayüzü ile birlikte kullanıldığında kaynak yönetimi deterministik olarak yapılabilir. Bu konular, nesne yönelimli programlama prensipleri, veri yapıları ve algoritmalar ile birleştirildiğinde, karmaşık yazılım mimarilerinde sağlam ve sürdürülebilir çözümler sağlar.
Bu eğitimde, C# dilinde yapıcı ve yıkıcıların nasıl tanımlandığını, nasıl kullanılacağını, iyi uygulama örneklerini ve sık yapılan hataları öğreneceksiniz. Ayrıca, kaynak yönetimi, bellek sızıntılarını önleme ve hata yönetimi konularında ileri düzey teknikler keşfedeceksiniz.

Temel Örnek

text
TEXT Code
using System;

class Kisi
{
public string Ad;
public int Yas;

// Yapıcı
public Kisi(string ad, int yas)
{
Ad = ad;
Yas = yas;
Console.WriteLine("Nesne oluşturuldu.");
}

// Yıkıcı
~Kisi()
{
Console.WriteLine("Nesne yok edildi.");
}

public void Goster()
{
Console.WriteLine($"Ad: {Ad}, Yaş: {Yas}");
}

}

class Program
{
static void Main()
{
Kisi k1 = new Kisi("Ahmet", 25);
k1.Goster();

Kisi k2 = new Kisi("Ayşe", 30);
k2.Goster();
}

}

Bu temel örnekte, Kisi sınıfı iki alan içerir: Ad ve Yas. Yapıcı Kisi(string ad, int yas), nesne oluşturulduğunda otomatik olarak çalışır ve alanları başlatır. Yıkıcı \~Kisi() nesne Garbage Collector tarafından temizlendiğinde çalışır ve kaynakları serbest bırakır. Goster() metodu nesneye ait bilgileri yazdırır. Bu örnek, nesne yaşam döngüsünü, alanların güvenli bir şekilde başlatılmasını ve C# dilinde yapıcı-yıkıcı kullanımını gösterir. İleri düzey projelerde benzer yapılar kaynak yönetimi ve hata önleme açısından kritik öneme sahiptir.

Pratik Örnek

text
TEXT Code
using System;

class DosyaYoneticisi : IDisposable
{
private string dosyaYolu;
private System.IO.StreamWriter yazici;

// Yapıcı
public DosyaYoneticisi(string yol)
{
dosyaYolu = yol;
try
{
yazici = new System.IO.StreamWriter(dosyaYolu);
Console.WriteLine($"Dosya {dosyaYolu} açıldı.");
}
catch (Exception ex)
{
Console.WriteLine($"Dosya açılırken hata: {ex.Message}");
}
}

public void Yaz(string veri)
{
if (yazici != null)
{
yazici.WriteLine(veri);
Console.WriteLine("Veri yazıldı.");
}
}

// Yıkıcı
~DosyaYoneticisi()
{
Dispose(false);
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (yazici != null)
{
yazici.Close();
yazici = null;
Console.WriteLine($"Dosya {dosyaYolu} kapatıldı.");
}
}
}

}

class ProgramAvanzado
{
static void Main()
{
using (DosyaYoneticisi dy = new DosyaYoneticisi("veriler.txt"))
{
dy.Yaz("Merhaba Dünya");
}
}
}

Bu pratik örnek, DosyaYoneticisi sınıfının dosya yönetimi için yapıcı ve yıkıcı kullanımını gösterir. Yapıcı dosyayı açar, yıkıcı ve IDisposable implementasyonu dosyanın güvenli bir şekilde kapatılmasını sağlar. using bloğu, Dispose() metodunun deterministik olarak çağrılmasını temin eder. Bu yapı, dosya, veritabanı veya ağ bağlantılarında güvenli kaynak yönetimi sağlar. Ayrıca hata yönetimi ve performans optimizasyonu için ileri düzey bir örnek teşkil eder.

C# best practices ve yaygın hatalar:

  • Yapıcılar, nesneleri tam ve güvenli şekilde başlatmalı, giriş verilerini doğrulamalıdır.
  • Yıkıcılar yalnızca yönetilmeyen kaynakları serbest bırakmalıdır.
  • IDisposable implementasyonu ve using kullanımı, deterministik kaynak yönetimi sağlar.
  • Sık yapılan hatalar: yapıcıda ağır işlemler yapmak, hata kontrolü yapmamak, kaynakları sadece yıkıcıya bırakmak.
  • Debugging ve performans optimizasyonu için loglama ve GC takibi önemlidir.

📊 Referans Tablosu

C# Element/Concept Description Usage Example
Yapıcı Nesne oluşturulurken alanları başlatır public Kisi(string ad){ Ad=ad; }
Yıkıcı Yönetilmeyen kaynakları serbest bırakır \~Kisi(){ /* kaynak temizle */ }
IDisposable Kaynakları deterministik olarak yönetir class DosyaYoneticisi:IDisposable{ public void Dispose(){ /* kapat */ } }
using IDisposable objeleri güvenli kullanır using(var dy=new DosyaYoneticisi("veri.txt")){ dy.Yaz("..."); }
Yapıcı Aşırı Yükleme Farklı parametre setleri ile nesne oluşturma public Kisi(string ad,int yas){ Ad=ad; Yas=yas; }

Özet ve sonraki adımlar:
Yapıcılar ve yıkıcılar, nesnelerin güvenli ve verimli kullanımını sağlar. Yapıcılar, nesnenin başlangıç durumunu garanti ederken, yıkıcılar ve IDisposable kaynak yönetimi sağlar. Öğrenilen kavramlar, daha geniş C# projelerinde nesne yaşam döngüsü ve kaynak yönetimi için temel oluşturur. Sonraki adımlar, statik yapıcılar, Singleton ve Factory desenleri ile ileri düzey kaynak yönetimi tekniklerini içerebilir. Pratik yaparak, dosya ve veritabanı işlemleri gibi gerçek dünya senaryolarında bu kavramları uygulamak önerilir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu konudaki anlayışınızı pratik sorularla test edin.

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek