我想知道如何声明具有一些固定值的记录。我需要使用以下模式发送数据: Byte($FF)-Byte(0..250)-Byte(0..250) 。我为此使用了 record,我希望它的第一个值保持不变,这样它就不会被搞砸。
如:

TPacket = record
  InitByte: byte; // =255, constant
  FirstVal,
  SecondVal: byte;
end;

最佳答案

您不能依赖构造函数,因为与类相反,记录不需要使用它们,默认的无参数构造函数是隐式使用的。

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

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, FirstVal = %d, SecondVal = %d', [r.InitByte, r.FirstVal,r.SecondVal]));
end;

更新了 以包含嵌套类型范围 0..250

10-08 00:55