扩展类时出现抽象错误
问题描述:
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;
它呼吁从ImplA
不ImplB
step2
因为你是它期待
你也从一个普通的对象改变返回类型TObjA,编译器可能不一样, ,但我没有支持仿制药的德尔福副本进行测试。
谢谢,就是这样。我所要做的只是添加override关键字。 :) – GMEFil 2013-03-18 16:19:11