(delphi11最新学习资料) Object Pascal 学习笔记---第5章第3节(记录的初始化与记录构造函数)

文章讲述了在Delphi中,全局和局部变量对记录字段初始化的不同影响,强调了使用构造函数初始化记录以避免意外数据的风险,以及Delphi10.4中新增的托管记录特性。
摘要由CSDN通过智能技术生成
5.3.2 初始化记录

​ 将记录类型(或记录实例)的变量定义为全局变量时,其字段将被初始化;但在堆栈上定义变量(作为函数或过程的局部变量)时,其字段不会被初始化。因此,如果你编写了这样的代码(是 RecordMethods 示例的一部分):

var
  MyRec: TMyRecord;
begin
  Show(MyRec.ToString);

​ 它的输出或多或少会是随机的。当字符串被初始化为空字符串时,记录的字符字段和整数字段将包含给定内存位置上的数据(就像堆栈上的字符或整数变量一样)。一般来说,根据实际的编译或执行情况,你会得到不同的输出结果,例如:

[]: 1637580

​ 这就是为什么在使用记录(和大多数其他变量一样)之前必须对其进行初始化,以避免读取不合逻辑数据的风险,这甚至有可能导致应用程序崩溃。处理这种情况有两种截然不同的方法。第一种是为记录使用构造函数,这将在下一节中介绍。第二种是使用托管记录,这是 Delphi 10.4 中的一项新功能,我将在本章后面介绍。

5.3.3 记录与构造函数

​ 让我们从常规构造函数开始。记录支持一种称为构造函数的特殊方法,可以用来初始化记录数据。与其他方法不同的是,构造函数也可以应用于记录类型以定义新实例(但仍可应用于现有实例)。下面是为记录添加构造函数的方法:

type
  TMyNewRecord = record
  public
    constructor Create(NewString: string);
    function ToString: string;

​ 构造函数是一个有代码的方法:

constructor TMyNewRecord.Create(NewString: string);
begin
  Name := NewString;
  Init(0);
end;

​ 现在,您可以使用以下两种编码方式之一来初始化记录:

var
  MyRec, MyRec2: TMyNewRecord;
begin
  MyRec := TMyNewRecord.Create('Myself');
  MyRec2.Create('Myself');

请注意,记录构造函数必须要有参数:如果尝试声明只有Create,则会收到错误消息“在记录类型上不允许无参数的构造函数”。

注解: 您可以使用多个重载的 Create 构造函数或多个名称不同的构造函数。我将在讨论类的构造函数时详细介绍这一点。正如我们将很快看到的,托管记录使用不同的语法,不引入无参数构造函数,而是引入Initialize类方法。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值