Yapıcı overloading
Aynı sınıfta birden çok yapıcı tanımlamayı öğrenirsin.
Yapıcı overloading
Bir sınıfta birden çok yapıcı tanımlayabilirsin; buna overloading (aşırı yükleme) denir. Her yapıcının parametre imzası farklı olmalıdır: farklı sayıda parametre ya da farklı türler.
Örnek: Order sınıfında hem public Order() hem public Order(string customer) olabilir. Çağrıya göre derleyici doğru yapıcıyı seçer. Bu, çağıran tarafa esneklik sunar: gerekli bilgisi olan detaylı, olmayan basit çağrı yapar.
Çözümleme (resolution)
new yazdığında derleyici verdiğin argümanları her yapıcının parametre imzasıyla karşılaştırır ve tek eşleşeni seçer. new Order("Ayşe") çağrısı string alan yapıcıya gider.
Eğer hiçbir yapıcı uymazsa derleme hatası alırsın. Eğer birden çok yapıcı uyuyor ama belirsizse yine hata alırsın; örneğin int ve double parametreli iki yapıcı varken new Sample(5) belirsiz olabilir. İmzaları net tutmak bu durumu önler.
Uygulama Order sınıfına iki overload yapıcı ekle
Order sınıfına public string Customer { get; set; } ve public int Items { get; set; } özelliklerini ekle. İki yapıcı tanımla: birincisi parametresiz, gövdede Customer = "Bilinmiyor"; Items = 0; ata. İkincisi string customer ve int items alsın ve bunları özelliklere atasın. Main içinde new Order("Ayşe", 3) ile örnek oluştur ve Customer'ı yazdır.
Örnek çözümü göster
parametresiz ve iki parametreli. Main içine Order o = new Order("Ayşe", 3); Console.WriteLine(o.Customer); yaz.
Örnek çözüm:
using System;
class Order
{
public string Customer { get; set; }
public int Items { get; set; }
public Order()
{
Customer = "Bilinmiyor";
Items = 0;
}
public Order(string customer, int items)
{
Customer = customer;
Items = items;
}
}
class Program
{
static void Main()
{
Order o = new Order("Ayşe", 3);
Console.WriteLine(o.Customer);
}
}
Kendini test et
-
Çağrıyı yapıcıya eşle
- new Order()
- Parametresiz yapıcı
- new Order("Ayşe")
- Tek parametreli yapıcı
- new Order("Ayşe", 3)
- İki parametreli yapıcı
- Order()
- Yalnızca çağrı değil
-
Overload çağrısını tamamla
Order o = new Order("____", 3);Cevabı göster
Order o = new Order("Ayşe", 3); -
İki yapıcı ne zaman overload sayılır?
- Aynı parametreler, farklı isim
- Farklı erişim belirleyici
- Farklı parametre imzası
- Aynı gövde
Cevabı göster
Farklı parametre imzası — Doğru. Overloading için parametre imzası farklı olmalıdır.