加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi中,我可以从具有相同名称的类方法调用实例方法吗?

发布时间:2020-12-15 09:23:41 所属栏目:大数据 来源:网络整理
导读:在Delphi中有可能让一个类方法调用一个具有相同名称的继承实例方法吗?例如,我尝试过这样的事情: //... Skipped surrounding class definitionsfunction TSomeAbstractDialogForm.Execute: Boolean;begin Result := ShowModal = mrOk;end; 我有一些继承抽象
在Delphi中有可能让一个类方法调用一个具有相同名称的继承实例方法吗?例如,我尝试过这样的事情:

//... Skipped surrounding class definitions

function TSomeAbstractDialogForm.Execute: Boolean;
begin
  Result := ShowModal = mrOk;
end;

我有一些继承抽象对话框表单的专用对话框类,每个类都有自己的工厂方法:

class function TSomeInheritingDialogForm.Execute: Boolean;
var
  Fm: TSomeInheritingDialogForm;
begin
  Fm := TSomeInheritingDialogForm.Create(nil);
  try
    Result := Fm.Execute;
  finally
    Fm.Free;
  end
end;

这种方法导致了一个永无止境的循环,因为F.Execute不是调用基类的预期实例方法,而是一遍又一遍地调用工厂方法(导致一堆创建的表单).

当然,显而易见的解决方案是更改工厂方法的名称(我将其命名为CreateAndShow),但这让我很好奇.为什么编译器没有警告我隐藏的方法?有没有办法在这样的情况下显式调用实例方法?

解决方法

你可以尝试一个强硬的演员.但最好重命名类函数. (例如CreateAndExecute).

子类中的Execute隐藏了父类中的execute(我认为编译器会给出一个警告).你可以通过硬性演员来访问它.但是没有办法区分实例方法和类方法.

function TSomeAbstractDialogForm.Execute: Boolean;
begin
  Result := ShowModal = mrOk;
end;

class function TSomeInheritingDialogForm.Execute: Boolean;
var
  Fm: TSomeInheritingDialogForm;
begin
  Fm := TSomeInheritingDialogForm.Create(nil);
  try
    Result := TSomeAbstractDialogForm(Fm).Execute;
  finally
    Fm.Free;
  end
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读