C# programlama serimize devam ederken, nesne yönelimli programlamanın (OOP) temel taşlarından olan Constructor (Yapıcı) Metotları daha derinlemesine inceleyeceğiz. Bir önceki dersimizde yapıcı metotların temellerini ve nasıl otomatik çağrıldıklarını görmüştük. Bu yazımızda ise, varsayılan (default) ve parametreli yapıcı metotların birlikte kullanımı ile nesnelerimizi farklı senaryolara göre nasıl başlatacağımızı uygulamalı bir örnekle pekiştireceğiz.
Constructor Metotlar Neden Birden Fazla Olabilir?
Bir sınıfta birden fazla yapıcı metot tanımlayabiliriz; buna Constructor Overloading denir. Bu özellik, aynı sınıftan farklı başlangıç koşullarına sahip nesneler oluşturmamıza olanak tanır. Örneğin, bir "Kitap" nesnesi oluştururken:
- Parametresiz (Varsayılan) Constructor: Kitap bilgilerini henüz bilmediğimizde veya boş bir kitap nesnesi oluşturmak istediğimizde kullanılabilir. Bu durumda, özelliklere varsayılan boş veya sıfır değerler atanabilir.
- Parametreli Constructor: Kitabın adı, yazarı, yayınevi ve sayfa sayısı gibi tüm bilgilerini nesneyi oluştururken doğrudan atamak istediğimizde kullanılır.
Bu esneklik, kodunuzu daha esnek ve farklı ihtiyaçlara cevap verebilir hale getirir.
Uygulama Örneği: Kitap Sınıfı ile Constructor Kullanımı
Şimdi bir konsol uygulaması üzerinde Kitap
adında bir sınıf tanımlayalım ve bu sınıf içinde hem varsayılan hem de parametreli yapıcı metotları kullanarak kitap nesnelerini nasıl başlatacağımızı gösterelim.
1. Kitap
Sınıfını ve Constructor Metotları Oluşturma:
Projenize yeni bir "Sınıf" ekleyerek Kitap.cs
adında bir dosya oluşturun. Bu sınıf, kitap bilgilerini tutacak özellikleri ve iki farklı constructor metodu içerecek:
public class Kitap
{
// Kitap özellikleri (Properties)
public string Ad { get; set; }
public string Yazar { get; set; }
public string YayinEvi { get; set; }
public int SayfaSayisi { get; set; }
// Varsayılan (Parametresiz) Constructor
public Kitap()
{
Ad = ""; // Özelliklere boş string değer atıyoruz
Yazar = "";
YayinEvi = "";
SayfaSayisi = 0; // Integer olduğu için 0 atıyoruz
Console.WriteLine("Varsayılan Kitap nesnesi oluşturuldu.");
}
// Parametreli Constructor
public Kitap(string ad, string yazar, string yayinEvi, int sayfaSayisi)
{
Ad = ad; // Parametreden gelen değeri özelliğe atıyoruz
Yazar = yazar;
YayinEvi = yayinEvi;
SayfaSayisi = sayfaSayisi;
Console.WriteLine("Parametreli Kitap nesnesi oluşturuldu.");
}
}
Yukarıdaki kodda:
Kitap
sınıfının temel özellikleri (Ad
,Yazar
,YayinEvi
,SayfaSayisi
) tanımlanmıştır.public Kitap()
: Bu, parametresiz (varsayılan) constructordır.Kitap
nesnesi parametre belirtmeden oluşturulduğunda otomatik olarak çağrılır ve tüm özelliklere başlangıç (boş veya sıfır) değerleri atar.public Kitap(string ad, string yazar, string yayinEvi, int sayfaSayisi)
: Bu ise parametreli constructordır. Nesne oluşturulurken dışarıdan belirtilen değerleri alır ve ilgili özelliklere atar.
2. Constructor Metotları Program.cs
İçinden Çağırma ve Özellikleri Kullanma:
Konsol uygulamasının ana çalışma noktası olan Program.cs
dosyasındaki Main
metodu içinde, Kitap
sınıfından farklı constructor'ları kullanarak nesneler oluşturalım ve özelliklerini konsola yazdıralım:
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("--- Kitap 1 (Varsayılan Constructor) ---");
Kitap kitap1 = new Kitap(); // Parametresiz constructor çağrılır
Console.WriteLine($"Ad: {kitap1.Ad}");
Console.WriteLine($"Yazar: {kitap1.Yazar}");
Console.WriteLine($"Yayınevi: {kitap1.YayinEvi}");
Console.WriteLine($"Sayfa Sayısı: {kitap1.SayfaSayisi}");
Console.WriteLine("\n-----------------------------------\n");
Console.WriteLine("--- Kitap 2 (Parametreli Constructor) ---");
Kitap kitap2 = new Kitap("Sefiller", "Victor Hugo", "Can Yayınları", 1500); // Parametreli constructor çağrılır
Console.WriteLine($"Ad: {kitap2.Ad}");
Console.WriteLine($"Yazar: {kitap2.Yazar}");
Console.WriteLine($"Yayınevi: {kitap2.YayinEvi}");
Console.WriteLine($"Sayfa Sayısı: {kitap2.SayfaSayisi}");
// Konsol ekranının hemen kapanmaması için kullanıcıdan bir tuş bekliyoruz
Console.ReadKey();
}
}
Bu kod bloğunda:
Kitap kitap1 = new Kitap();
satırı çalıştırıldığında,Kitap
sınıfının parametresiz constructor'ı çağrılır.kitap1
nesnesinin özellikleri boş stringler ve 0 olarak ayarlanır.Kitap kitap2 = new Kitap("Sefiller", "Victor Hugo", "Can Yayınları", 1500);
satırı çalıştırıldığında ise,Kitap
sınıfının parametreli constructor'ı çağrılır. Gönderilen değerlerkitap2
nesnesinin ilgili özelliklerine atanır.- Her iki durumda da, nesnelerin özellikleri konsola yazdırılarak başlangıç durumları gösterilir.
Sonuç
Constructor metotlar, C# programlamada nesnelerin doğru bir şekilde başlatılmasını sağlayan temel mekanizmalardır. Constructor overloading özelliği sayesinde, aynı sınıftan farklı başlangıç koşullarına sahip nesneler yaratma esnekliğine sahip olursunuz. Bu, kodunuzun daha tutarlı, okunabilir ve yönetilebilir olmasına büyük katkı sağlar.
Constructor'lar hakkında aklınıza takılan başka sorular var mı veya farklı bir örnek üzerinde çalışmak ister misiniz?