2013-08-06 31 views
1

我有一个Unit1.pas(例如),我有一个TServiceTIdTCPServerTIdUDPServer组件插入,但我想在不同的文件中实现事件方法,如UDP.pasTCP.pas。他们是否可能是TService的一部分?怎么样?我们可以在多个源文件中实现一个对象吗?

+1

对于可读性来说,分散在不同单位的方法不会是一个严重的打击吗? – alcalde

回答

3

一个类不能跨多个单元实现。但是,事件处理程序可以在任何地方实现。

+0

对,之前我使用过这种方法,而且我完全忽略了这个项目中的可能性(我猜想缺少咖啡):-0 – PSyLoCKe

3

恐怕你不能在不同的单元中实现它,因为编译单元(.dcu)必须包含在其接口中声明的所有方法的实现。

但是可以将实现的某些部分写入单独的文件,然后将它们(使用{$I指令)包含到主单元中。

E.g.在Unit1.pas的实现部分添加行

{$I TCP.pas} 
{$I UDP.pas} 

,然后您实现在TCP.pas和UDP.pas一些方法(当然没有任何unitinterfaceimplementation关键字),就好像你正在写入Unit1.pas的implementation部分。 当然,所有的方法('local'和'included')都必须在Unit1.pas的接口部分中声明。

通常要包含的文件的扩展名为.inc

也许你可能会检查你的设计,这样你就没有逻辑上独立的块在一个类中。也许将业务逻辑与TCP和UDP逻辑(不同的类别,因此不同的单元)分开将导致更优雅的设计。

+0

非常有用的信息,但IDE会考虑将这些文件作为主单元的补充当执行代码编辑器的功能,如显示未声明的标识符和自动完成? – PSyLoCKe

+1

至少在Delphi 6中,IDE自动完成时忽略包含的文件等,但调试器进入它们。我想XE2也是如此,尽管我现在无法验证它。 – Inspired

+0

所以 - 是的,'包括'功能并不是将代码拆分为单独文件的好方法。 – Inspired

相关问题