2012-04-17 4 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を)')意味を推測。 –

答えて

4

プロパティアクセサは、直接データメンバまたはプロパティが属する同じクラスの直接の方法のいずれかでなければなりません。

試してみてください。

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

エラーメッセージがかなりそれをすべて言います。 "Some.ID"はレコードまたはオブジェクトではありません。これはデータメンバーのデータメンバーです。別のものです。

+2

はそうしているようです。私はなぜプロパティがこのように制限されているのだろう... –

関連する問題