为什么 "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 被放弃了。
我注意到在 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 被放弃了。