使用派生类实例化和初始化基类对象的更短方法

时间:2014-10-29 19:59:39

标签: c# casting initialization instantiation

我有一个指向基类(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 个答案:

答案 0 :(得分:1)

您可以使用object initializer

switch (x)
{
   case 1:
       b = new D1 { x = 1 };
   break;
   case 2:
       b = new D2 { y = 1 };
   break;
}