我几天去有人问我为什么这段代码会出错。我试图弄清楚,但我不能,所以我希望你们帮助我们。
第一个单元:其中类定义为单元Unit1;
interface
type
TSomeGeneric<T> = class
private
function getSelf: TSomeGeneric<T>;
public
property This : TSomeGeneric<T> read getSelf;
end;
implementation
{ TSomeGeneric<T> }
function TSomeGeneric<T>.getSelf: TSomeGeneric<T>;
begin
Result := Self;
end;
end.
unit2 :它对单元 1 单元 Unit2 中定义的类进行引用;
interface
uses
Unit1;
type
TSomeGeneric<T> = class(Unit1.TSomeGeneric<T>);
implementation
end.
frmmain:它使用unit2是一些点单元ufrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
Unit2;
type
TfrmMain = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure SomeProcedure(ASG : TSomeGeneric<Integer>);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ TfrmMain }
procedure TfrmMain.FormCreate(Sender: TObject);
var ASG : TSomeGeneric<Integer>;
begin
ASG := TSomeGeneric<Integer>.Create();
with ASG do
try
//make use os the class ...
SomeProcedure(This); //error -> incompatible types
finally
Free();
end;
end;
procedure TfrmMain.SomeProcedure(ASG: TSomeGeneric<Integer>);
begin
//...
end;
end.
我怀疑此时 TSomeGeneric = class(Unit1.TSomeGeneric) TSomeGeneric 被定义为另一个类而不是参考,但我无法确认