2010-02-01 3 views
1

내가 분명히이 컴파일되지 않는, 게터가

type 
    TLight = class 
    private 
    Ftimer : TTimer; 
    property IsAutoRotating: Boolean read Ftimer.Enabled; 

을 말해봐 개인 VAR의 속성 값을 반환해야하지만 왜, 바람직하게는 별도의 VAR에 그 상태를 유지하지 않고이 문제를 (해결하는 방법 .

+1

당신이 또는 컴파일해야 것 어떻게 생각 만든 :

IsAutoRotating 속성을 구현하기 위해

, 당신은 getter 함수를 만들어야합니다? 응답은 질문의 "이유"부분에 대해 어떤 종류의 대답을 기대하는지 판단하는 데 도움이됩니다. –

+0

Rob + ftimer가 NIL이면 어떻게 될까요? –

답변

3

게터과 재산의 세터 클래스의 방법해야하거나 부모의 - 또는 -. 클래스의 필드 또는 부모의

을 FTimer.Enabled가 없습니다 둘 때문에 위의 구조는하지 않습니다 작동. 게터 기능을 만들 수 있습니다. 및 FTimer (게터)의이 속성을 반환하고 FTimer (세터)의 속성을 설정합니다 세터 절차 :

유형 :

property Enabled: Boolean read GetEnabled write SetEnabled; 

지금 클래스 완료 CTRL-SHIFT-C를 누르십시오. 이제 두 가지 방법이 만들어집니다. 게터 유형에

:

Result := FTimer.Enabled; 

세터 유형에서 :

FTimer.Enabled := Value; 

잇 짜잔!

.

5

속성 읽기 및 쓰기 지정자가 클래스의 필드 또는 메서드를 참조해야하므로 코드가 컴파일되지 않습니다. Ftimer.Enabled이 아닙니다.

type 
    TLight = class 
    private 
    Ftimer : TTimer; 
    function GetIsAutoRotating: Boolean; 
    public 
    property IsAutoRotating: Boolean read GetIsAutoRotating; 
    end; 

function TLight.GetIsAutoRotating : Boolean; 
begin 
    Result := Ftimer.Enabled; 
end; 
+0

그리고'property IsAutoRotating'을 클래스 선언의'published' 섹션으로 옮기고 싶을 것입니다. –

+0

FTimer가 할당되지 않은 경우 생성 된 AV로부터 보호하십시오. – skamradt

+0

왜 PA 속성 게시를 권하고 싶습니까? 속성에 문자열 이름을 통해 액세스해야한다는 증거는 없습니다. –

관련 문제