2016-03-21 19 views
0

Bulabilir en yakın iş parçacığı this one idi, ancak senaryo var farklı - çağrılacak temel yapıcı varsayılan olanıdır. Burada hangi parametreyi iletmek istediğimi belirtmem gerekiyor. Bir kurucuda hem bu hem de temel aşırı yükleri çağırabilir miyim?

aşağıdaki senaryo var ki:

public class Base 
    { 
     public string Str; 

     public Base(string s) 
     { 
      Str = s; 
     } 
    } 

    public class A : Base 
    { 
     public string Str2; 

     public A(string str2) 
      : base(str2) 
     { 
      Str2 = str2; 
     } 

     public A(string str2, string str) 
      : base(str) 
     { 
      Str2 = str2; 
     } 
    } 

Ben A'nın 2 yapıcı aşırı içinde aynı mantık tekrarlamaktan kaçınmak istiyor (teknik olarak korunabilirliğe iyileştirilmesi/kopyala-yapıştır azaltıcı bir işlev içine tüm mantığı sarabilirdiniz Sonunda tüm aşırı yüklenmeler aynı koda güvenirdi. Eğer başka bir çözüm yoksa bunu takip ederdim).

İlk A 1. kurucu aşırı yükünü ve daha sonra da temel olanı arayabileceğimi düşündüm. Ama öyle değil mi?

Buradaki yaklaşım nedir?

cevap

2

doğru yaklaşım

public class A : Base 
{ 
    public string Str2; 

    public A(string str2) 
     : this(str2, str2) 
    { 
    } 

    public A(string str2, string str) 
     : base(str) 
    { 
     Str2 = str2; 
    } 
} 

A tek parametreli yapıcı her iki parametre this( kullanılarak yerine base( aynı dize geçen A 2 parametresi oluşturucu çağıran olacaktır. Daha sonra tek bir parametre yapıcısının gövdesini kaldırırsınız, çünkü tüm işler iki parametre yapıcısında gerçekleştirilir.

İlgili konular