1

私はUnit1.pas(たとえば)とコンポーネントをドロップしTServiceたを持っていますが、イベント メソッドを と のように別のファイルに実装したいと考えています。それらが TService の一部である場合、それは可能ですか? どのように?TIdTCPServerTIdUDPServerUDP.pasTCP.pas

4

2 に答える 2

3

コンパイルされたユニット (.dcu) には、そのインターフェイスで宣言されているすべてのメソッドの実装が含まれている必要があるため、別のユニットに実装することはできません。

しかし、実装の一部を別々のファイルに書き込んで、それらを ({$Iディレクティブと共に) メイン ユニットに含めることは可能です。

たとえば、Unit1.pas の実装セクションに行を追加します。

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

そして、TCP.pas と UDP.pas にいくつかのメソッドを実装します (もちろんunitorinterfaceまたはimplementationキーワードは使用しません)。ちょうどimplementationUnit1.pas の部分の中に書いているかのように。もちろん、すべてのメソッド ('local' と 'included' の両方) は、Unit1.pas のインターフェイス セクションで宣言する必要があります。

通常、含まれるファイルには拡張子.inc.

おそらく、論理的に独立したブロックがすべて 1 つのクラスに含まれないように、設計を見直すかもしれません。サービス ロジックを TCP および UDP ロジック (異なるクラス、したがって異なるユニット) から分離すると、より洗練された設計につながる可能性があります。

于 2013-08-06T18:24:37.560 に答える
3

クラスを複数のユニットにまたがって実装することはできません。ただし、イベント ハンドラーはどこにでも実装できます。

于 2013-08-06T18:21:49.293 に答える