私はUnit1.pas
(たとえば)とコンポーネントをドロップしTService
たを持っていますが、イベント メソッドを と のように別のファイルに実装したいと考えています。それらが TService の一部である場合、それは可能ですか? どのように?TIdTCPServer
TIdUDPServer
UDP.pas
TCP.pas
2 に答える
コンパイルされたユニット (.dcu) には、そのインターフェイスで宣言されているすべてのメソッドの実装が含まれている必要があるため、別のユニットに実装することはできません。
しかし、実装の一部を別々のファイルに書き込んで、それらを ({$I
ディレクティブと共に) メイン ユニットに含めることは可能です。
たとえば、Unit1.pas の実装セクションに行を追加します。
{$I TCP.pas}
{$I UDP.pas}
そして、TCP.pas と UDP.pas にいくつかのメソッドを実装します (もちろんunit
orinterface
またはimplementation
キーワードは使用しません)。ちょうどimplementation
Unit1.pas の部分の中に書いているかのように。もちろん、すべてのメソッド ('local' と 'included' の両方) は、Unit1.pas のインターフェイス セクションで宣言する必要があります。
通常、含まれるファイルには拡張子.inc
.
おそらく、論理的に独立したブロックがすべて 1 つのクラスに含まれないように、設計を見直すかもしれません。サービス ロジックを TCP および UDP ロジック (異なるクラス、したがって異なるユニット) から分離すると、より洗練された設計につながる可能性があります。
クラスを複数のユニットにまたがって実装することはできません。ただし、イベント ハンドラーはどこにでも実装できます。