Constructor和Class函数之间有什么区别

Moh*_*mad 2 delphi

在Delphi中,构造函数和类函数之间用于实例化对象有什么区别?

TPersonnel = class(TPersistent)
public
  class function Create: TPersonnel; overload;
  constructor Create(APersonelID: integer); overload;
end;

class function TPersonnel.Create: TPersonnel;
begin
  result := inherited Create;
end;

constructor TPersonnel.Create(APersonelID: integer);
begin
  inherited Create;
end;
Run Code Online (Sandbox Code Playgroud)

我知道类函数Create会隐藏默认构造函数.

无论构造函数Create参数

有理由我应该使用构造函数吗?

Dav*_*nan 6

有理由我应该使用构造函数吗?

简单地说,只有构造函数可以实例化一个新实例.类函数无法创建新实例.

对于产生新实例的类函数,它必须最终调用构造函数以实例化新实例.如果您希望编写在创建实例时执行的代码,则应将其放在构造函数中.

在你的代码的类函数中

class function TPersonnel.Create: TPersonnel;
begin
  Result := inherited Create;
end;
Run Code Online (Sandbox Code Playgroud)

您正在调用没有参数的继承构造函数.