gpt4 book ai didi

delphi - 类型转换 : what is difference between below 2 lines of code?

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

下面两行代码有什么区别。两者都试图获取路径,其中一个正在工作,另一个正在抛出错误。我正在开发 Delphi-7

Path:= (((FFormOwner as TForm).Designer) as IDesigner).GetPrivateDirectory; --Working
Path:= IDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory ; --Error

下面是使用代码行获取路径的代码。

constructor TsampleComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FFormOwner:=TForm(Owner);
if not (Owner is TForm) then
repeat
FFormOwner:=TForm(FFormOwner.Owner);
until (FFormOwner is TForm) or (FFormOwner.Owner=nil);

if (csDesigning in ComponentState) then
Path:= (((FFormOwner as TForm).Designer) as IDesigner).GetPrivateDirectory
else
Path:=ExtractFilePath(Application.EXEName);
.
.

end;

最佳答案

IDesigner(TForm(FFormOwner).Designer)

这将执行 Designer 的简单重新解释。它将失败,因为 Designer 的类型为 IDesignerHook,它与 IDesigner 不同。

(FFormOwner as TForm).Designer) as IDesigner

这对 IDesigner 执行运行时查询,并通过调用 QueryInterface 来解决。这是获取与现有接口(interface)不同的接口(interface)的正确方法。

关于delphi - 类型转换 : what is difference between below 2 lines of code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30637832/

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