2012-04-17 4 views
0

다음 간단한 형식 정의가 컴파일되지 않는 이유는 무엇입니까? 기록 또는 개체가 아닌 변수에서 속성에 액세스하려고 할 때클래스 멤버에서 속성 읽기

그것은 E2467 Record or object type required 제공
type 
    SomeType = class(TObject) 
    ID: Cardinal; 
    end; 

    AnotherType = class(TObject) 
    Some: SomeType; 
    property ID: Cardinal read Some.ID; // E2467 
    end; 

, 이 발생합니다.

그러나 Some이 바로 대상입니까? 이것은 컴파일러 버그입니까 (저는 최신 XE2를 사용하고 있습니다)? 이것이 예상되는 행동이라면, 내가하려는 일을하는 올바른 방법은 무엇입니까?

+1

여기서 "객체 유형"은 클래스 ('클래스 (TObject) '가 아닌) 이전의'object' ('SomeType = object')를 의미합니다. –

답변

4

속성 접근자는 속성이 속한 동일한 클래스의 직접 데이터 멤버 또는 직접 메서드 중 하나 여야합니다.

시도 :

AnotherType = class(TObject) 
    function GetId: cardinal; 
    property ID: Cardinal read GetId; 
end; 

오류 메시지가 거의 다 나와 있어요. "Some.ID"는 레코드 나 개체가 아닙니다. 데이터 멤버의 데이터 멤버입니다.

+2

그렇게 보입니다. 속성이 왜 이렇게 제한되어 있는지 궁금합니다 ... –