函数继承Delphi错误

Hil*_*uza 3 delphi

我想知道为什么我在以下代码中出现"不兼容类型"错误消息.我正在寻找TInheritanceClass的结果是'Test String Passed'.

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;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

function TInheritanceClass.Test: String;
begin
  Result := 'Test String';
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

inherited调用过程的继承方法时,该语句是合适的.对于函数,您需要编写:

Result := inherited;
Run Code Online (Sandbox Code Playgroud)

要么:

Result := inherited Test;
Run Code Online (Sandbox Code Playgroud)

基类方法也是错误的.你写了:

function TBaseClass.Test: String;
begin
  Result := Result + ' Passed';
end; 
Run Code Online (Sandbox Code Playgroud)

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

可能你需要一个稍微复杂的结构.也许是这样的:

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;
Run Code Online (Sandbox Code Playgroud)