gpt4 book ai didi

delphi - Delphi错误中的函数继承

转载 作者:行者123 更新时间:2023-12-03 15:47:47 24 4
gpt4 key购买 nike

我想知道为什么以下代码出现“不兼容类型”错误消息。我正在寻找的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com