为了初始化 Delphi 记录,我总是添加一个方法(类或对象)来初始化为已知的良好默认值。 Delphi 还允许使用参数定义记录“构造函数”,但您不能定义自己的无参数“构造函数”。
TSomeRecord = record
Value1: double;
Value2: double;
procedure Init;
end;
procedure TSomeRecord.Init;
begin
Value1 := MaxDouble;
Value2 := Pi;
end;
鉴于上面的记录,没有任何警告表明记录尚未初始化。开发人员可能会忽略调用Init
记录在案。有没有办法自动地将记录初始化为我的默认值,可能不仅仅是一个简单的FillChar
;
例如
var
LSomeRecord: TSomeRecord
begin
// someone forgot to call LSomeRecord.Init here
FunctionThatTakesDefaultSomeRecord(LSomeRecord);
end;
如何将记录自动初始化为我的默认值?
[笔记]
问题得到解答后我不想再修改。任何读者都应阅读有关使用类方法而不是变异对象方法进行初始化的最佳实践的评论。
从Delphi 10.4开始,有自定义管理记录 https://docwiki.embarcadero.com/RADStudio/Sydney/en/Custom_Managed_Records
TMyRecord = record
Value: Integer;
class operator Initialize (out Dest: TMyRecord);
class operator Finalize (var Dest: TMyRecord);
end;
这种构造与以前可用于记录的构造之间的巨大区别在于自动调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)