加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在delphi中的父类和子类之间进行转换

发布时间:2020-12-15 09:41:12 所属栏目:大数据 来源:网络整理
导读:我正在编写一些针对两个非常相似的硬件版本的软件,直到我使用API??来初始化硬件,我才知道我将会找到哪种类型. 因为硬件非常相似,我计划有一个父类(TParent),它有一些抽象方法(对于硬件不同的地方),然后是两个子类(TChildA,TChildB),它们以硬件相关的方式实现
我正在编写一些针对两个非常相似的硬件版本的软件,直到我使用API??来初始化硬件,我才知道我将会找到哪种类型.

因为硬件非常相似,我计划有一个父类(TParent),它有一些抽象方法(对于硬件不同的地方),然后是两个子类(TChildA,TChildB),它们以硬件相关的方式实现这些方法.

所以我首先实例化一个TParent的对象检查它是什么样的,然后把它投射到正确的孩子.

但是,当我这样做并调用在子类中完全实现的抽象方法之一时,我得到一个EAbstractError.

例如:

myHardware:=TParent.Create();

if myHardware.TypeA then
   myHardware:=TChildA(myHardware)
else
   myHardware:=TChildB(myHardware);

myHardware.SomeMehtod();

我假设我不能将父类强制转换为子类,并且还有一种更好的方法可以做到这一点.有什么指针吗?

解决方法

你是对的,你不能也不应该从基类转换为派生类.

我假设你不想让Child对象重新运行Parent构造函数?

如果是这样 . . .

删除父/子关系,您将只有一个硬件类.
对于特定的ChildA和ChildB功能,创建一个新的继承模式,以便您具有ISpecificHardwareTasks接口或基类,以及两个派生类(SpecificA& SpecificB).

当硬件构建它自己的时候,它就会知道它正在使用什么类型的硬件,然后创建一个SpecificA或SpecificB的实例.此实例是Hardware的私有实例.

硬件公开了包装ISpecificHardWareTasks方法的方法(如果有意义,它甚至可以实现该接口).

具体类可以引用Hardware类,如果有必要的话(虽然我不知道你是否可以在构造函数中访问this指针,但是我的Delphi生锈了)

希望这些ramblings有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读