Yapılandırıcılar ne zaman çağrılır? [9]

Daha önceki bölümlerde kalıtım ve sınıf hiyerarşileri ele alınırken önemli bir soru aklınıza takılmış olabilir: Türetilmiş bir sınıf oluşturulunca önce kimin yapılandırıcısı çalıştırılır; türetilmiş sınıfın yapılandırıcısı mı, yoksa temel sınıf tarafından tanımlanan yapılandırıcı mı? Örneğin, B adında bir türetilmiş sınıf ve A adında bir temel sınıf verildiğini varsayalım. A'nın yapılandırıcısı B'ninkinden önce mi çağrılır, yoksa sonra mı? Bu sorunun yanıtı şudur: Bir sınıf hiyerarşisinde yapılandırıcılar, temel sınıftan türetilmiş sınıfa doğru türetilme sırasına göre çağrılırlar. Üstelik, base kullanılsın ya da kullanılmasın bu sıra aynıdır. Eğer base kullanılmazsa, temel sınıfların her birinin varsayılan (parametresiz) yapılandırıcısı çalıştırılacaktır. Aşağıdaki program yapılandırıcıların çalıştırılma sırasını göstermektedir.

// Yapilandiricilarin ne zaman cagrilacagini gosterir.
using System;
// Bir temel sinif olustur.
class A {
public A() {
Console.WriteLine("Constructing A.");
}
}

// A'dan turetilen bir sinif olustur.
class B : A {
public B() {
Console.WriteLine("Constructing B.");
}
}

// B'den turetilen bir sinif olustur.
class C : B {
public C() {
Console.WriteLine("Constructing C.");
}
}

class OrderOfConstruction {
public static void Main() {
C c=new C();
}
}

Bu programın çıktısı aşağıdaki gibi olur.

Constructing A.
Constructing B.
Constructing C.

Gördüğünüz gibi, yapılandırıcılar türerilme sırasına göre çağrılmaktadır.
Üzerinde biraz düşünürseniz, yapılandırıcıların türetilme sırasına göre çağrılmalarının akla yatkın olduğunu görürsünüz. Temel sınıfın türetilmiş sınıflar tarafından gerçekleştirilen ilk kullanıma hazırlama işleminden ayrıdır ve muhtemlen de ön şart niteliğindedir. Bu nedenle, ilk önce gerçeklenmelidir.

Kaynak: Herbert Schildt
Herkes için C#

Hiç yorum yok:

Yorum Gönder