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

C# 用派生类实例化和初始化基类对象的较短方法,c#,casting,initialization,instantiation,C#,Casting,Initialization,Instantiation,我有一个指向基类(B)的指针,并希望根据条件使用不同的派生类对其进行实例化和初始化 我为下面的场景寻找更好、更短的解决方案。正如您在开关的每种情况下所注意到的,我应该将指针投射到派生类,以便能够对其进行初始化。我是否可能以更紧凑的方式进行实例化、强制转换和初始化 BaseClass b; switch (x) { case 1: b = new D1(); // D1 is derived from BaseClass D1 d1 = (D1) b;

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