现在我的老板是老派,开始使用Pascal进行编程,并不一定保持最新的Delphi的最新变化。
最近我一直在想,我们的核心技术之一是否“错了”。
我们的大部分应用程序与MysqL接口。一般来说,我们将创建一个记录,其结构用于存储从DB读取的数据,这些记录将存储在TList中。通常我们将有一个单位定义我们在应用程序中的各种记录,以及种子和读取记录的功能和过程。我们不使用如here概述的记录程序
在回顾了一些例子后,我开始想知道我们是否会更好地使用课程而不是记录,但是我无法以任何一种方式找到强有力的指导。
解决方法
>对于值类型,当您使用赋值时,a:= b,将进行复制。有两个不同的实例,a和b。
>对于引用类型,当您使用赋值时,a:= b,两个变量都指向同一个实例。只有一个实例。
这样做的主要后果是当您写入a.Field:= 42时会发生什么。对于记录,值类型,赋值a.Field会更改a中的成员的值,但不更改b中的成员的值。这是因为a和b是不同的实例。但是对于一个类,由于a和b都引用相同的实例,所以在执行a.Field:= 42后,你可以安全地声明b.Field = 42。
没有硬而快的规则说,你应该始终使用值类型,或者总是使用引用类型。两者都有自己的位置。在某些情况下,优选使用一种,在其他情况下,优选使用另一种。本质上,决策总是归结于对您所要求的任务运算符的意义。
你有一个现有的代码库,大概是熟悉它的程序员,做出了特别的选择。除非你有一个令人信服的理由转向使用参考类型,否则这种变化几乎肯定会导致缺陷。在现有代码(切换到引用类型更改赋值运算符的含义)以及在将来写入的代码中,缺陷(您和您的同事已经在特定上下文中对赋值运算符的意义开发了直觉,直觉会断开如果你切换)。
此外,您声明您的类型不使用方法。仅由数据组成的类型,并且没有与之相关联的方法很可能最好由值类型表示。我不能肯定地说,但我的本能告诉我,原来的开发商做出了正确的选择。