Delphi:记录构造函数vs工厂函数

前端之家收集整理的这篇文章主要介绍了Delphi:记录构造函数vs工厂函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
那么初始化记录的首选方式是什么?

使用“工厂功能”:

TMyRecord = record
  valueX: integer;
  valueY: integer;
end;

function MyRecord(const AValueX,AValueY: integer): TMyRecord;
begin
  result.valueX := AValueX;
  result.valueY := AValueY;
end;

var
  myrec: TMyRecord;
begin
  myrec := MyRecord(1,2);
end;

或构造函数

TMyRecord = record
  valueX: integer;
  valueY: integer;
  constructor Create(const AValueX,AValueY: integer);
end;

constructor TMyRecord.Create(const AValueX,AValueY: integer);
begin
  self.valueX := AValueX;
  self.valueY := AValueY;
end;

var
  myrec: TMyRecord;
begin
  myrec := TMyRecord.Create(1,2);
end;

我觉得构造函数更加封装,但是在读代码时很容易让人困惑。它使它看起来像一个缺少免费电话的课程。还要更多输入…

你为什么要偏爱一个呢?

解决方法

我喜欢上课,但是如果我要使用记录,我喜欢把它们尽可能地类似于类。所以我使用记录构造函数

但是有一个令人讨厌的记录和单位的错误。如果函数返回一个记录(使用方法),如果要访问这些方法,则会产生一个内部错误。您可以通过将其分配给另一个变量来规避这一点:

type 
  TMyRec = record
    ..
    procedure X;
  end;


function GetRec: TMyRec;



procedure Test;
var
  r1,r2 : TMyRec;
begin
  r1 := GetRec;
  r1.X; // internal error
  r2 := r1;
  r2.X; // No internal error;
原文链接:https://www.f2er.com/delphi/103346.html

猜你在找的Delphi相关文章