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

本文关键字:对象 方法 基类 初始化 派生 实例化 | 更新日期: 2023-09-27 18:28:16

我有一个指向基类(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);

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

您可以使用对象初始值设定项:

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