2013-02-10 2 views
-3

I #의 m이 클래스는 두 번째 클래스의 속성으로 두 클래스 간의 공유액세스 다른 클래스의 클래스/컴포넌트 절차/

TMyClass = class 
private 

public 
procedure onconnect (...); 

end; 


TFormA = class(TForm) 

MYCLASS : TMyClass; 

procedure StartFormB(...) 

end; 


TFormA.procedure StartFormB(...) 
begin 

    bForm.MYCLASS := MyClass; 

    bForm.Show; 

end; 


TFormB = class(TForm) 
private 
.... 
FMYCLASS : TMyClass; 
public 
...... 
..... 
property MYCLASS : TMyClass read FMYCLASS write FMYCLASS; 

end; 

TMyClass는 Indy TCP 서버와 같은 것으로, 속성을 통해 공유 클래스 인스턴스에 대한 액세스 권한을 갖는 bForm 내에서 클래스 이벤트 프로 시저 onconnect (..) 또는 onexecute (..) 함수를 호출하는 방법을 가정합니다.

이 쉽게

이 절차는 클래스 이벤트 프로 시저 하지만 bForm.FMyClass.onconnect (...)

가 나는에 ALINK을 구축 할 수 없습니다 작동하지 않습니다에 연결되어

aForm : TMyForm; 


aForm.onconnect(...); 

클래스 이벤트 프로 시저 ...

+3

'MyClass.XXX'는 'XXX' 메소드를 호출합니다. 너무 분명해서 대답이 될 수 없습니다. 그래서 당신이 질문을 개선해야한다고 생각합니다. –

+2

또한 'MyClass' 객체를 호출하지 마십시오. 클래스와 객체의 차이점을 알아야합니다. 객체는 클래스의 인스턴스입니다. 코드에서 'MYCLASS'와'FMYCLASS'는 클래스가 아닙니다. 인스턴스 또는 객체입니다. 적절하게 이름을 지정하십시오. –

+0

'OnConnect()'와 동일합니다. 'On' 접두사는 이벤트 속성에 대해 _reserved_이며, 이름을'Connect()'로 바꿉니다. – NGLN

답변

3

다른 단위로 클래스의 객체 속성에서 메소드를 호출하는 방법은 다음과 같습니다.

  • 는 객체 속성이
  • 이 방법은 공공 선언되어 있는지 확인 공공 또는을 발표 를 선언되어 있는지 확인합니다. 다음 메서드를 호출

하여 수행됩니다 : 당신은 당신이 실제로 뒤에 특성하지만 개인 필드 전화를 시도하지 않은 것을 알 수있다 편집에서

begin 
    FormA.MyClass.OnConnect(); 

. 의도적으로 작동하지 않습니다. 속성은 으로 디자인되어 실제 값을 보호합니다. 귀하의 경우 속성을 읽는 액세스 지정자는 컴파일러를 개인 필드로 직접 리디렉션하지만 기능 일 수도 있습니다.

따라서 : 필드()가 아닌 속성 (MyClass)을 호출하십시오.

+0

위 질문 문안을 변경했습니다. bForm.FMyClass.OnConnect(); 이 # m FormA.MyClass.OnConnect() 호출하는 것처럼 작동하지 않습니다; – user1769184