gpt4 book ai didi

delphi - 扩展类时的抽象错误

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

type
TObjA = class
a: string;
end;
type
worker<T> = interface
function step1(v: integer): T;
function step2(s: string): T;
end;

type
ImplA<T> = class(TInterfacedObject, worker<T>)
function step1(v: integer): T;
function step2(s: string): T; virtual; abstract;
end;

type
ImplB = class(ImplA<TObjA>)
function step2(s: string): TObjA;
end;
implementation


function ImplA<T>.step1(v: integer): T;
begin
result := step2(IntToStr(v));
end;

function ImplB.step2(s: string): TObjA;
var
r: TObjA;
begin
r := TObjA.Create;
r.a := 'step2 ' + s;
result := r;
end;


我正在尝试根据此结构构建功能。我知道它可以在Java中使用,但目前我正在使用delphi 2010。
调用ImplB.step1(1)时收到抽象错误
我该如何解决?

最佳答案

由于未将function step2(s: string): TObjA;声明为override,因此会出现错误。

所以在

function ImplA<T>.step1(v: integer): T;
begin
result := step2(IntToStr(v));
end;


它从 step2而不是 ImplA调用 ImplB,正如您期望的那样

您也将返回类型从泛型对象更改为TObjA,编译器可能不喜欢这种方式,但是我没有Delphi的副本,该副本支持泛型来进行测试。

关于delphi - 扩展类时的抽象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15480597/

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