扩展类时的抽象错误

时间:2013-03-18 15:30:18

标签: delphi

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)时出现抽象错误 我该如何解决这个问题?

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的副本支持泛型交付测试。