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)时出现抽象错误 我该如何解决这个问题?
答案 0 :(得分:5)
您收到错误,因为您未将function step2(s: string): TObjA;
声明为override
。
所以在
function ImplA<T>.step1(v: integer): T;
begin
result := step2(IntToStr(v));
end;
它正在调用来自step2
而不是ImplA
的{{1}}正如您期望的那样
您也将返回类型从通用对象更改为TObjA,编译器可能不喜欢这样,但我没有Delphi的副本支持泛型交付测试。