gpt4 book ai didi

delphi - 为什么我们应该使用类而不是记录,反之亦然?

转载 作者:行者123 更新时间:2023-12-03 14:34:08 25 4
gpt4 key购买 nike

我已经使用 Delphi 有一段时间了,但我并不是来自 CS 背景,而是“在工作中”学习的 - 大部分是从我的老板那里学到的,并通过从网络、用户那里收集到的点点滴滴进行了增强指南、示例等

现在我的老板是守旧派,开始使用 Pascal 编程,并且不一定了解 Delphi 的最新更改。

最近我一直想知道我们的一项核心技术是否“错误”。

我们的大多数应用程序都与 MySQL 交互。一般来说,我们会创建一个记录,其结构用于存储从数据库读取的数据,这些记录将存储在TList中。通常,我们将有一个单元来定义应用程序中的各种记录,以及播种和读取记录的函数和过程。我们不使用记录程序,例如here

在查看了一些示例之后,我开始想知道我们是否使用而不是记录会更好,但无论哪种方式,我都很难找到强有力的指导。

我们正在处理的事情是用户信息:姓名、出生日期、事件、事件类型。或时间表信息:时间、工作等...

最佳答案

最大的区别在于记录是值类型,而类是引用类型。简而言之,这意味着:

  1. 对于值类型,当您使用赋值 a := b 时,会创建一个副本。有两个不同的实例:ab
  2. 对于引用类型,当您使用赋值时,a := b,两个变量都引用同一个实例。只有一个实例。

这样做的主要后果是当您编写 a.Field := 42 时会发生什么。对于记录,值类型,赋值a.Field 会更改a 中的成员值,但不会更改b 中的成员值。这是因为 ab 是不同的实例。但对于一个类,由于 ab 都引用同一个实例,那么在执行 a.Field := 42 后你就可以安全地断言 b.Field = 42

没有硬性规则规定您应该始终使用值类型或始终使用引用类型。两者都有自己的位置。在某些情况下,最好使用其中一种,而在其他情况下,最好使用另一种。本质上,这个决定总是取决于您希望赋值运算符的含义。

您有一个现有的代码库,并且可能是熟悉它的程序员,它们已经做出了特定的选择。除非您有令人信服的理由改用引用类型,否则进行更改几乎肯定会导致缺陷。现有代码中的缺陷(切换到引用类型会改变赋值运算符的含义),以及您将来编写的代码中的缺陷(您和您的同事已经对特定上下文中的赋值运算符的含义形成了直觉,并且这种直觉将被打破)如果你切换)。

此外,您声明您的类型不使用方法。仅由数据组成且没有与之关联的方法的类型很可能最好由值类型表示。我不能肯定地说,但我的直觉告诉我,最初的开发人员做出了正确的选择。

关于delphi - 为什么我们应该使用类而不是记录,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19424868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com