如果我有一个基类和两个派生类,并且我想手动实现两个派生类之间的转换,有没有办法做到这一点? (在C#中)
abstract class AbsBase
{
private int A;
private int B;
private int C;
private int D;
}
class Imp_A : AbsBase
{
private List<int> E;
}
class Imp_B : AbsBase
{
private int lastE;
}
一般来说,我会从Imp_A中投射 - &gt; Imp_B和我希望E列表中的最后一个值是'LastE'。 此外,如果有三个或更多实现类(例如Salary,Hourly,Consultant和Former Employees),该怎么办?
无论这在架构上是否合理(我无法描述整个应用程序并且简明扼要)是否可能?
我打算写一个转换器,除了据我所知,转换器会创建一个Imp_B类的新对象,我不需要它,因为'employee'在任何时候都只是其中一个选项
-Devin
答案 0 :(得分:23)
class Imp_A : AbsBase
{
public static explicit operator Imp_B(Imp_A a)
{
Imp_B b = new Imp_B();
// Do things with b
return b;
}
}
现在您可以执行以下操作。
Imp_A a = new Imp_A();
Imp_B b = (Imp_B) a;
答案 1 :(得分:2)
如果可能的话,我建议您像这样编写Imp_B:
class Imp_B : Imp_A
{
private int A;
private int B;
private int C;
private int D;
private int lastE { get { return this.E.Last(); } }
}
如果你实际上无法从ImpB派生,那么你就不可能以你想要的方式透明地“处理”ImpA对象作为ImpB,因为它们在内存中并不是同一个东西。因此,实现显式转换。