是否可以将实例提升为派生类的实例?
例如,假设有一个基类Vehicle
。
Vehicle
有派生类:Boat
, Automobile
, Airplane
, 等等...
当创建一个新的 type 实例时Vehicle
,车辆的类型是未知的。
后来才发现这辆车是什么,说是一辆Boat
。是否可以将Vehicle
实例提升为Boat
对象?
澄清:Vehicle
实例可能有内容集,并且提升的对象需要保持这些内容
PS我现在已经成功地做到了,但是是手动的,而且非常笨拙。所以,我想知道是否有一种普遍接受的规范方式。
(2017 年 9 月 24 日)在下面添加了 Eric Lippert 的每个问题的真实案例:
*我的整个 C# 经验都是自学的,所以我没有学术基础,对“模式”等也不太了解。工厂模式和复合模式的想法听起来很有趣,可能是解决问题的更好方法(需要研究)。
我的真实案例是,我使用使用共享总线架构连接到计算机的测量设备(外围设备)自动进行电子测量。在任何给定的测试台上,用户可以选择连接各种不同的外围设备。为了自动找出可用的外围设备,我执行了一个自行开发的发现过程,以查找每个连接的外围设备的总线地址。然后,为了与发现的未知类型的外围设备进行通信,我创建了一个我调用的基类的实例Device
。 Device
具有一定的基本 I/O 协议方法和属性,如总线地址、通信超时等。然后使用Device
我查询外围设备的身份以找出制造商、型号和序列号。
从该信息中,我确定了外围设备的类型,并希望将实例“提升”为Device
专门针对该外围设备类型的派生类的实例,例如SpectrumAnalyzer
或Oscilloscope
或其他。
我认为我无意中所做的是在工厂类和基类之间创建了一个排序交叉。一旦知道外围设备的类型,Device
就有一个方法可以创建派生类的新实例并将其自己的属性深度复制到该派生实例。
也许如果我根据工厂模式而不是作为基类重新考虑解决方案,我可以改进逻辑。
有趣的东西......谢谢你。*