覆盖(演员)
如果我有一个基类和两个派生类,并且我想手动实现两个派生类之间的转换,有没有办法做到这一点? (在C#中)
abstract class AbsBase { private int A; private int B; private int C; private int D; } class Imp_A : AbsBase { private List E; } class Imp_B : AbsBase { private int lastE; }
通常我会从Imp_A – > Imp_B进行转换,我希望E列表中的最后一个值是’LastE’。 此外,如果有三个或更多实现类(例如Salary,Hourly,Consultant和Former Employees),该怎么办?
无论这在架构上是否合理(我无法描述整个应用程序并且简洁)是否可能?
我打算写一个转换器,除了据我所知,转换器将创建一个Imp_B类的新对象,我不需要它,因为’employee’在任何时候都只是其中一个选项。
-Devin
您必须实现显式或隐式运算符。
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;
如果可能的话,我建议您像这样编写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,因为它们在内存中并不是同一个东西。 因此,实现显式转换。
- 我可以绑定WinRT / Windows 8商店应用程序中的DynamicObject
- 嵌套或不嵌套的if-blocks?
- MVC3模型使用自定义EditorTemplate和Partial View将pagedlist绑定到ViewModel
- 从C#AsyncCTP使用ExecuteReaderAsync的任何缺点
- ASMX webservice不返回JSON,只能使用application / x-www-form-urlencoded contentType进行POST
- 带图像的WPF单选按钮
- 如何使用GC.KeepAlive()以及用于什么目的?
- 是否有可能获得const的getter?
- 最短日期和最长日期