2014-10-29 3 views
-1

У меня есть указатель на базовый класс (B) и вы хотите создать и инициализировать его с помощью разных производных классов на основе условия.Ускоренный способ создания и инициализации объекта базового класса с производными классами

Я ищу лучшее и более короткое решение для следующего сценария. Как вы заметили в каждом случае коммутатора, я должен указать указатель на производный класс, чтобы иметь возможность его инициализировать. Возможно ли, что я создаю экземпляр, литье и инициализацию более компактно?

BaseClass b; 
switch (x) 
{ 
    case 1: 
     b = new D1(); // D1 is derived from BaseClass 
     D1 d1 = (D1) b; 
     d1.x = 1; // x is specific to D1 class 
    break; 
    case 2: 
     b = new D2(); // D2 is derived from BaseClass 
     D2 d2 = (D2) b; 
     d2.y = 1; // y is specific to D2 class 
    break; 
} 
b.z = 1; // z is a common attribute 
b.w = 2; // w is a common attribute 
BaseClassList.Add(b); 

ответ

1

Вы можете использовать object initializer:

switch (x) 
{ 
    case 1: 
     b = new D1 { x = 1 }; 
    break; 
    case 2: 
     b = new D2 { y = 1 }; 
    break; 
} 
Смежные вопросы