如何设置默认值以在delphi中记录
问题描述:
我正在使用RAD XE7。在我的Delphi应用程序中,我想为记录字段设置默认值。如何设置默认值以在delphi中记录
我试过下面的代码,但它不能编译,我知道这是错误的。我还有其他方法吗?
TDtcData = record
TableFormat : TExtTableFormat = fmNoExtendedData;
DTC : integer = 0;
Description : string = 'Dummy';
Status : TDtcStatus;
OccurenceCnt : integer =20;
FirstDTCSnapShot: integer;
LastDTCSnapShot: integer;
end;
答
如果要定义一个部分初始化的记录,只是声明了一个constant record,但省略这些参数不需要的默认值:
Type
TDtcData = record
TableFormat : TExtTableFormat;
DTC : integer;
Description : string;
Status : TDtcStatus;
OccurenceCnt : integer;
FirstDTCSnapShot: integer;
LastDTCSnapShot: integer;
end;
Const
cDefaultDtcData : TDtcData =
(TableFormat : fmNoExtendedData;
DTC : 0;
Description : 'Dummy';
OccurenceCnt : 20);
var
someDtcData : TDtcData;
begin
...
someDtcData := cDefaultDtcData;
...
end;
答
通过增加在Delphi“class like”记录类型,你可以通过使用类函数来解决这个问题。
定义class function CreateNew: TDtcData; static;
为您的记录。
的实现设置的默认值所产生的记录:
class function TDtcData.CreateNew: TDtcData;
begin
Result.TableFormat := fmNoExtendedData;
Result.DTC := 0;
Result.Description := 'Dummy';
Result.OccurenceCnt := 20;
end;
使用此得到像这样的默认值的记录:
var
AData: TDtcData;
begin
AData := TDtcData.CreateNew;;
end.
你可以在使用记录的功能,用你想要的值返回一个新记录。看看例如System.Diagnostics中的TStopWatch记录的StartNew函数。 – nil
为什么要使用记录,而不是类?如果你正在使用指向记录的指针,那么为我设置警报铃,因为类对象本质上是指针,在我看来,通过使用类,你的问题就会消失。 – Dsm
其实我正在将代码迁移到xe7,旧代码是在Codegare 2007中为什么和那里有很多旧代码中的记录。创建构造函数是很好的解决方案 – Ankush