4

Delphi 记录中的构造函数调用和过程调用之间的行为是否存在差异?我有一个 D2010 代码示例,我想将其转换为 D2009(我正在使用)。该示例使用无参数构造函数,这在 Delphi 2009 中是不允许的。如果我替换为简单的无参数过程调用,记录是否有任何功能差异?

IE

  TVector = record
  private
    FImpl: IVector;
  public
    constructor  Create;    // not allowed in D2009
  end;

变成

  TVector = record
  private
    FImpl: IVector;
  public
    procedure  Create;    // so change to procedure
  end;

据我所知,这应该可行,但我可能会遗漏一些东西。

4

3 回答 3

2

记录构造函数在本机 Win32 代码中绝对是不必要的误导性语法糖。记录构造函数和过程之间的唯一区别是语法:

TVector = record
  constructor Create;
end;

var
  vec : TVector;

begin
  vec:= TVector.Create;

TVector = record
  procedure Create;
end;

var
  vec : TVector;

begin
  vec.Create;

AFAIK .NET 代码有所不同(我没有使用 .NET)

于 2010-03-24T04:24:18.587 回答
1

一个小兴趣点是,假设记录构造函数需要在内部与普通方法相比有点特殊,因为默认情况下记录有一个默认的无参数构造函数,必须用您的自定义版本覆盖。

记录构造函数和记录过程之间的另一个明显区别是您的构造函数必须至少定义一个参数。(因为记录不允许继承,并且默认构造函数没有参数。)

于 2010-03-24T04:03:43.790 回答
0

构造函数用于构造记录。首次创建记录时调用它。

可以而且必须根据需要调用函数。

您可以创建一个“构造”过程,但您必须自己调用它。

TVector = record
private
  FImpl: IVector;
public
  procedure Create;
end;



var
  vec : TVector;
begin
  vec.Create;

另一种方法是创建一个返回初始化记录的工厂函数。

function CreateVector(): TVector;
begin
  Result.Create;
end;
于 2010-03-22T19:53:18.063 回答