陈
陈冲伟
Unregistered / Unconfirmed
GUEST, unregistred user!
现声明了三个类,其继承关系如下:
type
TClass1 = class(TObject)
public:
constructor Create
virtual;
end;
TClass2 = class(TClass1)
public:
constructor Create
override;
end;
TClass3 = class(TClass2)
public:
constructor Create
override;
end
同时定义了两个类引用,如下:
type TClass1Ref = class of TClass1
TClass2Ref = class of TClass2;
在如下语句中使用:
var
MyClassRef: TClass1Ref;
MyClass: TClass1;
begin
MyClassRef := TClass3;
MyClass := MyClassRef.Create;
end;
结果发现第二句MyClassRef根本没有调用TClass3的Create方法,连TClass1的Create
方法也没有调用。
而将MyClassRef的类型声明为TClass2Ref,即:
var
MyClassRef: TClass2Ref;
MyClass: TClass1;
begin
MyClassRef := TClass3;
MyClass := MyClassRef.Create;
end
则第二句MyClassRef就会调用TClass3的Create方法,也是我所期望的结果。
请问第一种情况可能是由于什么原因造成的,如何解决?
type
TClass1 = class(TObject)
public:
constructor Create
virtual;
end;
TClass2 = class(TClass1)
public:
constructor Create
override;
end;
TClass3 = class(TClass2)
public:
constructor Create
override;
end
同时定义了两个类引用,如下:
type TClass1Ref = class of TClass1
TClass2Ref = class of TClass2;
在如下语句中使用:
var
MyClassRef: TClass1Ref;
MyClass: TClass1;
begin
MyClassRef := TClass3;
MyClass := MyClassRef.Create;
end;
结果发现第二句MyClassRef根本没有调用TClass3的Create方法,连TClass1的Create
方法也没有调用。
而将MyClassRef的类型声明为TClass2Ref,即:
var
MyClassRef: TClass2Ref;
MyClass: TClass1;
begin
MyClassRef := TClass3;
MyClass := MyClassRef.Create;
end
则第二句MyClassRef就会调用TClass3的Create方法,也是我所期望的结果。
请问第一种情况可能是由于什么原因造成的,如何解决?