当您在基类中定义类构造函数(即设置一些静态类变量)时,是否可以在派生类中重写此类构造函数,并从其层次结构父级调用构造函数并继承?
例:
TBaseclass = class(TObject)
public
class constructor ClassCreate; virtual;
end;
TOtherClass = class(TBaseClass)
public
class constructor ClassCreate; override;
end;
**implementation**
class constructor TBaseClass.ClassCreate;
begin
//do some baseclass stuff
end;
class constructor TotherClass.ClassCreate;
begin
inherited;
//do some other stuff
end;
Run Code Online (Sandbox Code Playgroud)
首先,由于类构造函数不能是虚拟的(它们是虚拟的没有意义),因此需要删除virtual
和override
关键字以使代码编译.
类构造函数通常用于初始化类变量.类变量通常需要初始化一次且仅一次.如果你可以inherited
按照你在问题中建议的方式打电话,那么TBaseClass.ClassCreate
会被多次调用,而实际上它需要被调用一次.
虽然您可以inherited
在类构造函数中编写,并且代码将编译,但编译器只是忽略它.
program ClassConstructors;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Count: Integer;
type
TBaseclass = class
public
class constructor ClassCreate;
end;
TOtherClass = class(TBaseClass)
public
class constructor ClassCreate;
end;
class constructor TBaseClass.ClassCreate;
begin
inc(Count);
end;
class constructor TotherClass.ClassCreate;
begin
inherited;
end;
begin
TBaseClass.Create.Free;
TOtherClass.Create.Free;
Writeln(Count);//outputs 1
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
当然,请注意,两个类构造函数都会运行.
归档时间: |
|
查看次数: |
2496 次 |
最近记录: |