我想知道为什么我在以下代码中出现"不兼容类型"错误消息.我正在寻找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)
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)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |