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

4

1 回答 1

5

由于您没有声明function step2(s: string): TObjA;override.

所以在

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

它不是你所期望的那样step2打电话ImplAImplB

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

于 2013-03-18T15:38:14.830 回答