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