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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |