2016-03-21 8 views
0

Der nächstgelegene Thread, den ich finden konnte, war this one, aber das Szenario ist anders - der Basiskonstruktor, der aufgerufen werden soll, ist der Standard. Hier muss ich angeben, welchen Parameter ich übergeben möchte.Kann ich diese und die Basisüberladungen in einem Konstruktor aufrufen?

Sagen wir das folgende Szenario haben:

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; 
     } 
    } 

Ich möchte die gleiche Logik in A der 2. Konstruktor Überlastung vermeiden Wiederholung (technisch konnte ich die gesamte Logik in eine Funktion wickeln Sie die Copy-Paste/Verbesserung der Wartbarkeit reduziert , denn am Ende würden alle Überladungen auf den gleichen Code zurückgreifen, würde dies folgen, wenn es keine andere Lösung gibt.

Ich dachte, ich erste Konstruktor Überlastung ersten A nennen könnte und danach die Basis ein. Aber ich kann es nicht.

Was ist der Ansatz hier?

Antwort

2

Das würde richtige Ansatz

seine
public class A : Base 
{ 
    public string Str2; 

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

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

Der einzelne Parameter Konstruktor A ruft den 2 Parameter Konstruktor A in der gleichen Zeichenfolge beiden Parameter this( vorbei statt base( verwenden. Sie entfernen dann den Hauptteil des Konstruktors für einzelne Parameter, da die gesamte Arbeit im Konstruktor für zwei Parameter ausgeführt wird.

Verwandte Themen