在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),但这让我好奇。编译器为什么没有警告我有隐藏的方法?在这种情况下是否有一种明确调用实例方法的方法?