为什么 "Point" / "Rect" / "Bounds" 等函数在 类 和类型单元中声明?

Why are functions like "Point" / "Rect" / "Bounds" (etc) declared both in Classes and in Types unit?

我注意到在 Delphi 中声明并实现了 Point / Rect / Bounds 等 7 个函数 Classes 和在系统 Types 单元中。

这有什么原因吗?对于较新的 Delphi 版本也是如此吗?

(我的猜测是可以使用 Types 单元来避免需要时的 Classes 开销)

在旧版本中,这些类型和函数是在 Classes 中声明的。随着 RTL 的开发,特别是为了支持跨平台,这些类型对于不包括 Classes 的单元可用变得可取。

引入了 Types 单元来实现这一点。 Types 单元没有 uses 依赖项,因此可以安全地被任何其他单元使用,无论级别有多低。

主声明已移至 Types,并且 Classes 重新导出这些类型和函数,以使从 Classes 导入的现有代码受益。例如,SysUtils 使用 Types,但不允许使用 Classes。将这些类型和函数移动到像 Types 这样的无依赖单元可以实现这一点。

此更改是在 Delphi 5 和 Delphi 6 之间进行的,这是 Delphi 跨平台开发的开始。在那个例子中它是 Kylix,但是 RTL 的重组有利于未来的跨平台开发,即使 Kylix 被放弃了。