读书人

为什么子类对象不可以传递给父类的变量

发布时间: 2012-03-01 10:25:46 作者: rapoo

为什么子类对象不可以传递给父类的变量?
TTest1 = class

end;

TTest2 = class(TTest1)

end;

procedure TestFun(var Test: TTest1);
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
var
Test1: TTest1;
Test2: TTest2;
begin
Test1 := TTest1.Create;
Test2 := TTest2.Create;
Test1 := Test2; //这里可以

TestFun(Test2); //这里编译出错:Types of actual and formal var parameters must be identical

end;

[解决办法]
TO : 楼上的(楼主)

类对象的变量名字本来就是一个地址。 Test1 := Test2;时,只是把Test1指向了Test2,并没有“复制”一个对象。
还是因为“类对象的变量名字本来就是一个地址”,所以procedure TestFun(Test: TTest1);就已经是传址了,不会在过程内部生成一个对象的副本。
[解决办法]
procedure OpenForm(FormClass: TCRMFormClass; var FormName; InitCode: string);
begin
TCRMForm(FormName) := FormClass.CRMCreate(Application, InitCode);
TCRMForm(FormName).Show;
// others
end;

读书人网 >.NET

热点推荐