2016-03-30 6 views
1

Я знаю, что это не работает таким образом, так как конструктор класса является недействительным:Можно ли вернуть дочерний класс из конструктора родительского класса

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

Есть ли способ делая это.

+1

No. То, что вы хотите это фабричный метод вместо конструктора. – MarcinJuraszek

+0

Конструкторы не возвращают значения, поэтому нет. Вы можете использовать какой-либо фабричный/статический метод. –

+2

Добро пожаловать в прекрасный мир шаблонов дизайна. [Вот полезный] сайт (http://www.dofactory.com/net/design-patterns), который содержит описания и примеры многих из них для вашей справки. –

ответ

7

Нет, нет никакого способа, но ... Это звучит как фабричная модель реализована как статический метод:

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

Использование:

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

Только личные предпочтения, но 'ParentClass' * может * быть' абстрактным'. Собирался упомянуть, что метод тоже статичен, но вы избили меня до этого. ;) –

+0

Да пропустил это, но заметил очень быстро (иногда демо полезно! :)). – pwas

+0

спасибо, это то, что я искал. Я уже думал о статическом методе, но я не знал, как отключить родительский конструктор. – RomCoo

Смежные вопросы