当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在delphi中的父类和子类之间进行转换》经验,为你挑选了1个好方法。

我正在编写一些针对两个非常相似的硬件版本的软件,直到我使用API​​来初始化硬件,我才知道我会找回哪种类型.

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

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

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

例如:

myHardware:=TParent.Create();

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

myHardware.SomeMehtod();

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



1> Lieven Keers..:

您需要一个工厂方法来根据您使用的硬件类型返回正确的类...

function CreateHardware(isTypeA: Boolean): TParent;
begin
  if IsTypeA then Result := TChildA.Create
  else Result := TChildB.Create;
end;
...

var
  myHardware: TParent;
begin
  myHardware := CreateHardware(True);
  myHardwarde.SomeMethod;
end;

...或者你可以使用状态模式.

两种方法中的共同点是您的TParent类不具备确定硬件类型的知识.知识转移到工厂方法,工厂方法的调用者,工厂本身或状态类.


+1.你的答案对于提问者更好,并且比我的更普遍.好一个
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有