2016-03-30 4 views
1

Ich weiß, dass dies nicht auf diese Weise funktioniert, da der Konstruktor einer Klasse eine Lücke ist:Ist es möglich, ein Kind Klasse aus dem Konstruktor der übergeordneten Klasse zurück

class ParentClass 
{ 
    public ParentClass(int case) 
    { 
     if(case==1) 
      return new ChildClass1(); 
     else 
      return new ChildClass2(); 
    } 
} 

Gibt es eine Möglichkeit von Dies tun.

+1

Nein, was Sie wollen, ist ein Factory-Methode anstelle eines Konstruktors. – MarcinJuraszek

+0

Konstruktoren geben keine Werte zurück, also nein. Sie könnten eine Factory/statische Methode verwenden. –

+2

Willkommen in der wunderbaren Welt der Designmuster. [Hier ist eine nützliche] (http://www.dofactory.com/net/design-patterns) Seite, die Rundowns und Beispiele von vielen von ihnen als Referenz enthält. –

Antwort

7

Nein, es gibt keinen Weg, aber ... Es ist wie ein Fabrikmuster als statische Methode implementiert klingt:

class ParentClass 
{ 
    // "disable" ctor for public use but 
    // allow for children 
    protected ParentClass() { } 

    public static ParentClass CreateInstance(int @case) 
    { 
     if(@case==1) 
      return new ChildClass1(); 
     else 
      return new ChildClass2(); 
    } 
} 

Verbrauch:

var parentClass= ParentClass.CreateInstance(1); 
+1

Nur persönliche Vorliebe, aber die 'ParentClass' * könnte * abstrakt sein. Ich würde erwähnen, dass die Methode auch statisch ist, aber du hast mich damit geschlagen. ;) –

+0

Yeah verpasst das aber sehr schnell gemerkt (irgendwann ist Demo sinnvoll! :)). – pwas

+0

danke, das ist, was ich gesucht habe. Ich dachte bereits über eine statische Methode nach, aber ich wusste nicht, wie ich den Elternkonstruktor deaktivieren konnte. – RomCoo

Verwandte Themen