我有一个指向基类(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);
答案 0 :(得分:1)
您可以使用object initializer:
switch (x)
{
case 1:
b = new D1 { x = 1 };
break;
case 2:
b = new D2 { y = 1 };
break;
}