Jef*_*son 6 delphi constructor class
我正在尝试创建我所理解的Delphi 2007中的类工厂.我想将派生类类型传递给函数并让它构造该类类型的对象.
我找到了一些很好的参考资料,例如如何从类引用中创建Delphi对象并确保构造函数执行?,但我还是不能让它工作得很好.在下面的测试中,我无法让它调用派生构造函数,即使调试器告诉我oClass是TMyDerived.
我觉得我对这里的一些基本内容感到困惑,可以使用一些解释.谢谢.
program ClassFactoryTest;
{$APPTYPE CONSOLE}
uses
SysUtils;
// BASE CLASS
type
TMyBase = class(TObject)
bBaseFlag : boolean;
constructor Create; virtual;
end;
TMyBaseClass = class of TMyBase;
constructor TMyBase.Create;
begin
bBaseFlag := false;
end;
// DERIVED CLASS
type
TMyDerived = class(TMyBase)
bDerivedFlag : boolean;
constructor Create;
end;
constructor TMyDerived.Create;
begin
inherited;
bDerivedFlag := false;
end;
var
oClass: TMyBaseClass;
oBaseInstance, oDerivedInstance: TMyBase;
begin
oClass := TMyBase;
oBaseInstance := oClass.Create;
oClass := TMyDerived;
oDerivedInstance := oClass.Create; // <-- Still calling Base Class constructor
end.
Run Code Online (Sandbox Code Playgroud)
Rob*_*edy 13
您忽略了override
在派生类构造函数上指定.(我原本期望编译器发出关于隐藏基类方法的警告.)添加它,你应该看到TMyDerived.Create
被调用.
TMyDerived = class(TMyBase)
bDerivedFlag : boolean;
constructor Create; override;
end;
Run Code Online (Sandbox Code Playgroud)
另一种选择,因为你的构造函数不带参数,就是放弃虚拟构造函数而只是覆盖AfterConstruction
.
归档时间: |
|
查看次数: |
313 次 |
最近记录: |