2013-08-06 3 views
1

Unit1.pas (예) 어디 TIdTCPServerTIdUDPServer 구성 요소가있는 TService 있습니다.하지만 이벤트 메서드를 UDP.pasTCP.pas 같은 다른 파일에서 구현할 싶습니다. 그들이 TService의 일부라면 가능합니까? 방법?둘 이상의 소스 파일에 객체를 구현할 수 있습니까?

+1

다른 단위로 분산 된 메서드를 가독성에 심각한 타격을 가하지 않을까요? – alcalde

답변

3

클래스를 여러 단위로 구현할 수 없습니다. 그러나 이벤트 핸들러는 어디에서나 구현할 수 있습니다.

+0

맞아요. 전에이 접근법을 사용했는데이 프로젝트에서이 가능성을 완전히 무시했습니다. - – PSyLoCKe

3

유닛에 구현할 수 없습니다. 컴파일 된 유닛 (.dcu)은 인터페이스에 선언 된 모든 메소드의 구현을 포함해야하기 때문에 두려워합니다.

그러나 구현의 일부를 별도의 파일로 작성한 다음 ({$I 지시문 사용) 기본 장치에 포함시킬 수 있습니다.

예. 당신의로, Unit1.pas의 구현 섹션에서 라인

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

을 추가 한 다음 당신은 (물론 어떤 unit 또는 interface 또는 implementation 키워드없이) TCP.pas 및 UDP.pas에서 몇 가지 방법을 구현하는 것처럼 당신 Unit1.pas의 implementation 부분에 쓰고있었습니다. 물론 모든 메소드 ('local'및 'included'모두)는 Unit1.pas의 인터페이스 섹션에서 선언해야합니다.

일반적으로 포함 할 파일의 확장자는 .inc입니다.

아마도 논리적으로 독립적 인 블록을 하나의 클래스에 포함시키지 않도록 디자인을 검토 할 수 있습니다. 서비스 로직을 TCP 및 UDP 로직 (다른 클래스와 다른 유닛)과 분리하면보다 세련된 디자인으로 이어질 수 있습니다.

+0

IDE가이 파일을 기본 단위의 보수로 생각할 것입니다. 선언되지 않은 식별자 및 자동 완성 표시와 같은 코드 편집기 기능을 실행할 때? – PSyLoCKe

+1

적어도 델파이 6에서는 IDE가 자동 완성 등을 할 때 IDE가 포함 된 파일을 무시하지만 디버거가 들어갑니다. 나는 지금 XE2를 검증 할 수는 없지만 XE2도 마찬가지라고 생각합니다. – Inspired

+0

그렇습니다. '포함'기능은 코드를 별도의 파일로 분리하는 좋은 방법이 아닙니다. – Inspired

관련 문제