Delphi 与单元的接口部分相比,在实现中定义的类型之间有什么区别?

Delphi 与单元的接口部分相比,在实现中定义的类型之间有什么区别?,delphi,Delphi,我读过的几乎所有的Delphi代码在units接口部分都有所有的类类型定义,但我偶尔看到在实现部分使用类型定义 这两者之间到底有什么区别?我为什么要使用它?非常简单:仅在实现中定义的类型仅在实现中可见,因此它们不能用作接口中的参数类型或返回值。因此,根据这些类型是否只是一个实现细节,或者您希望通过接口使其在外部可见,来定位您的类型定义(与其他任何类型一样;-) 范围。接口声明是公共的,当其他单元包含在Uses子句中时,该接口声明可供其他单元使用。实现声明是私有的,仅在该特定单元中可用。接口中的代

我读过的几乎所有的Delphi代码在units接口部分都有所有的类类型定义,但我偶尔看到在实现部分使用类型定义


这两者之间到底有什么区别?我为什么要使用它?

非常简单:仅在实现中定义的类型仅在实现中可见,因此它们不能用作接口中的参数类型或返回值。因此,根据这些类型是否只是一个实现细节,或者您希望通过接口使其在外部可见,来定位您的类型定义(与其他任何类型一样;-)

范围。接口声明是公共的,当其他单元包含在Uses子句中时,该接口声明可供其他单元使用。实现声明是私有的,仅在该特定单元中可用。

接口中的代码更改和编译期间的代码更改实现之间存在一般性差异。如果在接口部分中添加类或更改现有类,那么引用更改的单元的每个单元都需要重新编译。但是,实现部分的更改(新的子类或代码更改)只需要重新编译该单元,IDE将把以前编译的DCU和新的DCU链接在一起,以创建EXE文件


总的来说,主要的好处是,它允许您设计代码来隐藏实现细节——定义接口中的父类和实现中的任何子类。或者在实现中定义类,如果它们仅用于实现接口部分中可用的类/方法的行为。

Ok,那么这是否有任何开销或节省,或者这纯粹是信息隐藏的问题?如前所述,我并没有经常看到它被使用,如果它是“更好的实践”,这似乎很奇怪。@HMcG,无论哪种方式都没有内在的开销——我不知道为什么你很少看到它被使用,也许人们没有考虑它(或者很少纯粹为了实现目的而需要额外的类型)。这纯粹是一个范围问题。只暴露需要暴露的东西。你的就是你的。我的就是我的。除非我们决定分享。谢谢,这就澄清了问题。我一直在练习将所有类类型的def放入接口部分,因为大多数示例都是这样显示的。一个典型的货运狂热编程案例——我只是没有真正想过。干杯。@HMcG,重要的是,现在你已经批判性地思考了这个问题,提出了正确的问题,并从中学习了——向上和向前