gpt4 book ai didi

delphi - delphi中父类和子类之间的转换

转载 作者:行者123 更新时间:2023-12-03 15:18:59 24 4
gpt4 key购买 nike

我正在编写一些针对非常相似硬件的两个版本的软件,在我使用 API 初始化硬件之前,我无法知道我将返回哪种类型。

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

所以我首先实例化一个 TParent 对象,检查它是什么类型,然后将其转换为正确的子对象。

但是,当我执行此操作并调用在子类中完全实现的抽象方法之一时,我收到 EAbstractError。

例如:

myHardware:=TParent.Create();

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

myHardware.SomeMehtod();

我假设我无法将父类转换为子类,并且可能有更好的方法来执行此操作。有什么指点吗?

最佳答案

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

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;

...或者您可以使用State pattern

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

关于delphi - delphi中父类和子类之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/681522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com