从班级成员中读取财产

时间:2012-04-17 09:02:59

标签: delphi properties delphi-xe2

为什么不编译以下简单类型定义?

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 个答案:

答案 0 :(得分:4)

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

尝试:

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

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