我一直在使用Delphi很长一段时间了,但是我没有从CS背景中学到“在工作中” - 主要来自我的Boss,并且通过网络上的点点滴滴进行增强,用户指南,例子等。
现在我的老板已经上学了,开始使用Pascal进行编程,并且不一定了解最新的Delphi更新。
就在最近,我一直想知道我们的核心技术之一是否“错误”。
我们的大多数应用程序都与MySQL连接。通常,我们将创建一个record
,其结构用于存储从数据库读取的数据,这些记录将存储在TList
中。通常,我们将有一个单元,用于定义应用程序中的各种记录,以及种子和读取记录的功能和过程。我们不使用记录程序,例如概述here
在回顾了一些例子之后,我开始怀疑使用classes
而不是记录是否更好,但我无论如何都难以找到强有力的指导。
我们正在处理的事情是用户信息:名称,DOB,事件,事件类型。或时间表信息:小时,工作等......
答案 0 :(得分:38)
最大的区别是记录是值类型,类是引用类型。简而言之,这意味着:
a := b
时,会生成副本。有两个不同的实例a
和b
。 a := b
时,两个变量都引用同一个实例。只有一个例子。 这样做的主要结果是当你写a.Field := 42
时会发生什么。对于记录,值类型,作业a.Field
会更改a
中成员的值,但不会更改b
中的成员值。这是因为a
和b
是不同的实例。但对于一个类,由于a
和b
都引用同一个实例,因此在执行a.Field := 42
之后,您可以安全地断言b.Field = 42
。
没有严格的规则说你应该总是使用值类型,或者总是使用引用类型。两者都有自己的位置。在某些情况下,最好使用一种,在其他情况下,最好使用另一种。从本质上讲,决策总是取决于您希望赋值运算符的含义。
你有一个现有的代码库,并且可能是熟悉它的程序员,它已经做出了特别的选择。除非您有令人信服的理由转而使用引用类型,否则进行更改几乎肯定会导致缺陷。现有代码中的缺陷(切换到引用类型会改变赋值运算符的含义),以及将来编写的代码中的缺陷(您和您的同事已经对特定上下文中赋值运算符的含义产生了直觉,并且直觉会破坏如果你换了)。
更重要的是,您声明您的类型不使用方法。只包含数据且没有与之关联的方法的类型很可能最好用值类型表示。我不能肯定地说,但我的直觉告诉我原始的开发者做出了正确的选择。