在delphi中的父类和子类之间进行转换
我正在编写一些针对两个非常相似的硬件版本的软件,直到我使用API??来初始化硬件,我才知道我将会找到哪种类型.
因为硬件非常相似,我计划有一个父类(TParent),它有一些抽象方法(对于硬件不同的地方),然后是两个子类(TChildA,TChildB),它们以硬件相关的方式实现这些方法. 所以我首先实例化一个TParent的对象检查它是什么样的,然后把它投射到正确的孩子. 但是,当我这样做并调用在子类中完全实现的抽象方法之一时,我得到一个EAbstractError. 例如: myHardware:=TParent.Create(); if myHardware.TypeA then myHardware:=TChildA(myHardware) else myHardware:=TChildB(myHardware); myHardware.SomeMehtod(); 我假设我不能将父类强制转换为子类,并且还有一种更好的方法可以做到这一点.有什么指针吗? 解决方法
你是对的,你不能也不应该从基类转换为派生类.
我假设你不想让Child对象重新运行Parent构造函数? 如果是这样 . . . 删除父/子关系,您将只有一个硬件类. 当硬件构建它自己的时候,它就会知道它正在使用什么类型的硬件,然后创建一个SpecificA或SpecificB的实例.此实例是Hardware的私有实例. 硬件公开了包装ISpecificHardWareTasks方法的方法(如果有意义,它甚至可以实现该接口). 具体类可以引用Hardware类,如果有必要的话(虽然我不知道你是否可以在构造函数中访问this指针,但是我的Delphi生锈了) 希望这些ramblings有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |