gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:35:41 27 4
gpt4 key购买 nike

那么初始化记录的首选方式是什么?

具有“工厂功能”:

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;

关于Delphi:记录构造函数与工厂函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com