TypeCasting:下面两行代码有什么区别?

2024-01-22

下面两行代码有什么区别。两者都试图获取路径,其中一个正在工作,另一个正在抛出错误。我正在开发 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。这是获取与现有接口不同的接口的正确方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeCasting:下面两行代码有什么区别? 的相关文章

随机推荐