gpt4 book ai didi

delphi - 检查类名

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

我不知道 OWNER 对象类名称。所以我必须像这样检查代码中的所有位置:

if TObject(OWNER) is TFirstClass then begin
TFirstClass(OWNER).FirstFunction;
TFirstClass(OWNER).SecondFunction;
...
end else
if TObject(OWNER) is TSecondClass then begin
TSecondClass(OWNER).FirstFunction;
TSecondClass(OWNER).SecondFunction;
...
end;

还有更好的办法吗?因为我必须在代码的许多地方执行 if 条件。TFirstClass 和 TSecondClass(我必须运行)的所有功能都是相同的。

注意:我使用 Delphi 5。

最佳答案

如果您无法访问 TFirstClass 和 TSecondClass,但仍想简化代码,这里有一个方法:

创建适配器基类:

type
TMyAdapter = class(TObject)
public
procedure FirstMethod; virtual; abstract;
procedure SecondMethod; virtual; abstract;
end;

然后创建后代类 TFirstClassAdapter 和 TSecondClassAdapter 并分别为它们提供对 TFirstClass 或 TSecondClass 实例的私有(private)引用。添加一个设置此引用的构造函数。重写适配器类的方法,以便它们调用适配的类。

type
TFirstClassAdapter = class(TMyAdapter)
private
fObject: TFirstClass;
public
constructor Create(AAdaptedObject: TFirstClass);

procedure FirstMethod; override;
procedure SecondMethod; override;
end;

constructor TFirstClassAdapter.Create(AAdaptedObject: TFirstClass);
begin
inherited Create;
fObject := AAdaptedObject;
end;

procedure TFirstClassAdapter.FirstMethod;
begin
fObject.FirstMethod;
end;

procedure TFirstClassAdapter.SecondMethod;
begin
fObject.SecondMethod;
end;

其他类(class)也一样。现在,您只需决定是否创建适配器一次并将其传递,或者是否创建一个在需要的地方调用的函数,这将为您的具体类提供一个适配器。

如果您使用接口(interface)实现适配器,那么您甚至不需要自己管理适配器的生命周期。

这样你就可以拥有 Ulrich 在 his answer 中给出的多态行为,但无需更改 TFirstClass 和 TSecondClass。

关于delphi - 检查类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/528832/

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