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

delphi – 如何在记录中声明固定值?

发布时间:2020-12-15 04:15:38 所属栏目:大数据 来源:网络整理
导读:我想知道如何声明一个具有一些固定值的记录.我需要使用这种模式发送数据:字节($FF)-Byte(0..250)-Byte(0..250).我正在使用记录,我想让它的第一个值保持不变,这样它就不会搞砸了. 如: TPacket = record InitByte: byte; // =255,constant FirstVal,SecondVa
我想知道如何声明一个具有一些固定值的记录.我需要使用这种模式发送数据:字节($FF)-Byte(0..250)-Byte(0..250).我正在使用记录,我想让它的第一个值保持不变,这样它就不会搞砸了.
如:
TPacket = record
  InitByte: byte; // =255,constant
  FirstVal,SecondVal: byte;
end;

解决方法

您不能依赖构造函数,因为与Classes相反,Records不需要使用它们,隐式使用默认的无参数构造函数.

但是你可以使用常量字段:

type
  TPacket = record
   type
     TBytish = 0..250;
   const
     InitByte : Byte = 255;
   var
     FirstVal,SecondVal: TBytish;
  end;

然后将其用作常规记录,除了您没有(并且不能)更改InitByte字段.
FillChar保留常量字段并按预期运行.

procedure TForm2.FormCreate(Sender: TObject);
var
  r: TPacket;
begin
  FillChar(r,SizeOf(r),#0);
  ShowMessage(Format('InitByte = %d,FirstVal = %d,SecondVal = %d',[r.InitByte,r.FirstVal,r.SecondVal]));
  // r.InitByte := 42;  // not allowed by compiler
  // r.FirstVal := 251; // not allowed by compiler
  r.FirstVal := 1;
  r.SecondVal := 2;
  ShowMessage(Format('InitByte = %d,r.SecondVal]));
end;

已更新,包括嵌套类型范围0..250

(编辑:李大同)

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

    推荐文章
      热点阅读