delphi - Delphi错误中的函数继承

标签 delphi

我想知道为什么以下代码出现“不兼容类型”错误消息。我正在寻找的 TInheritanceClass 的结果是“测试字符串已通过”。

TBaseClass = class
  function Test: String; virtual;
end;

TDerivedClass = class(TBaseClass)
  function Test: String; override;
end;

function TBaseClass.Test: String;
begin
  Result := Result + ' Passed';
end;

function TDerivedClass.Test: String;
begin
  Result := 'Test String';
  inherited;
end;

最佳答案

function TInheritanceClass.Test: String;
begin
  Result := 'Test String';
  inherited;
end;

语句inherited适用于调用过程的继承方法。对于一个函数,您需要编写:

Result := inherited;

或者:

Result := inherited Test;

基类方法也是错误的。您写道:

function TBaseClass.Test: String;
begin
  Result := Result + ' Passed';
end; 

在初始化函数结果变量之前读取它是错误的。看起来您正在尝试通过函数结果变量将数据传递给基类方法。虽然当前的实现细节意味着这可能看起来可行,但它相当严重地违反了设计原则。不要尝试这样的事情。

可能您需要稍微复杂一点的结构。也许像这样:

type
  TBaseClass = class
  public
    function TestName: string; virtual; abstract;
    function TestPassedText: string;
  end;

  TDerivedClass = class(TBaseClass)
  public
    function TestName: string; override;
  end;

function TBaseClass.TestPassedText: String;
begin
  Result := TestName + ' Passed';
end;

function TDerivedClass.TestName: String;
begin
  Result := 'MyName';
end;

关于delphi - Delphi错误中的函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35771210/

相关文章:

performance - Delphi 2009 中的 sqrt 仍然很慢吗?

delphi - DBGrid 中的复选框

.net - JclDotNet,以及一些使用汇编程序的奇怪调用模式

delphi - 当 TabPosition 为 tpLeft 时,TPageControl 选项卡显示错误的颜色和样式

delphi - 如何引用 "with"语句中创建的对象?

c++ - Delphi 和 C++,dll 导入

delphi - 调度接口(interface)声明有什么用?

delphi - delphi中的TCollectionItem和析构函数方法

delphi - 如何从 Delphi 6 对象中获取类以分配给元类变量?

delphi - 如何过滤 Windows 中执行的应用程序?