2013-08-06 64 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

相關問題