加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:15:17 所属栏目:大数据 来源:网络整理
导读:那么初始化记录的首选方式是什么? 使用“工厂功能”: 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 = 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读