2011-04-03 18 views
6

Anlamaya çalıştım ama hala emin değilim. Temel sınıfta bir kurucu varsa, türetilen sınıflar her zaman onu arar? Bunu geçersiz kılabileceğini biliyorum (burada doğru terim değil, biliyorum - onların yapıcılarına kod eklemeyi kastediyorum) ama kurucunun temel sınıfta tanımlanmış olduğunu varsayalım, türetilmiş olanlar her zaman onu arar. Bu doğru mu?Yapıcılar kalıtım

cevap

6

Evet, parametresiz bir kurucu varsa, her zaman çağrılır. Birden fazla kurucu varsa, sen base anahtar kelime ile arama hangisini tercih edebilirsiniz:

class Parent { 
    public Parent() {} 
    public Parent(int x) {} 
} 

class Child : Parent { 
    public Child(int x) : base(x) { 
    } 
} 

hiçbir parametresiz oluşturucu varsa, sen bunu yapmak zorla olacaktır:

class Parent { 
    public Parent(int x) {} 
} 

class Child : Parent { 
    // This will not compile without "base(x)" 
    public Child(int x) : base(x) { 
    } 
} 
+0

Anladığımdan emin değilim. İlk örnekte, Çocuk (int x): base (x) var, sanırım her ikisi de çağrılacak? – Miria

+0

@Miria: Evet. * Bazı * temel yapıcıların çağrılmasının hiçbir yolu yoktur (örneğin, ikinci örnekte derleyici, base (x) 'i kaldırmanıza izin vermez); 'base' kullanarak sadece hangisini * seçeceğinize ve hangi parametrelere sahip olacağınıza izin verir. – Jon

2

Temel sınıfta yalnızca parametresiz bir kurucu varsa, alt sınıf kurucu her zaman önce onu arar. Diğer taraftan, temel sınıfta tanımlanmış başka kurucular varsa, alt sınıfın yapıcıyı çağırmak için bir seçeneği olacaktır.