2012-04-17 51 views
0

为什么不编译下面的简单类型定义?从集体成员读取财产

type 
    SomeType = class(TObject) 
    ID: Cardinal; 
    end; 

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

它给E2467 Record or object type required此试图从一个变量,它不是一个记录或对象访问属性时出现。

Some是一个对象,对不对?这是一个编译器错误(我正在使用最新的XE2)?如果这是预期的行为,那么我正在尝试做什么的正确方法是什么?

+1

我猜 “对象类型” 在这里指的老同学'object'('SOMETYPE = object'),不是一个类('类(TObject的)')。 – 2012-04-17 09:34:52

回答

4

的属性访问必须是直接的数据成员或该属性属于同一类的直接方法。

尝试:

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

的错误信息几乎说明了一切。 “Some.ID”不是记录或对象。它是数据成员的数据成员 - 不同的事情。

+2

似乎是如此。我想知道为什么房产会受到这种限制... – 2012-04-17 09:41:34