2012-10-13 13 views
9

(Ben TFieldSpec dizisi kullanılır) alanları listesi olacaktır TableSpec Sahası özelliği Böylece sınıf sistemi Dizi özelliğini nasıl bildirebilirim?

TTableSpec=class(Tobject) 
    private 
    FName : string; 
    FDescription : string; 
    FCan_add : Boolean; 
    FCan_edit : Boolean; 
    FCan_delete : Boolean; 
    FFields : array[1..100] of TFieldSpec; 
    public 
    property Name: String read FName; 
    property Description: String read FDescription; 
    property Can_add : Boolean read FCan_add; 
    property Can_edit : Boolean read FCan_edit; 
    property Can_delete : Boolean read FCan_delete; 
    property Fields : array read FFields; 
    end; 

inşa edilmiştir. alanların (kullanmadan veya bir dizi kullanmadan) derleme sonucunda listeyi düzenlemek için nasıl bir hatayı

property Fields : array read FFields; 

geçersiz sözdizimi

[Error] Objects.pas(97): Identifier expected but 'ARRAY' found 
[Error] Objects.pas(97): READ or WRITE clause expected, but identifier 'FFields' found 
[Error] Objects.pas(98): Type expected but 'END' found 
[Hint] Objects.pas(90): Private symbol 'FFields' declared but never used 
[Fatal Error] FirstTask.dpr(5): Could not compile used unit 'Objects.pas' 
+0

Eğer tam 100 alanlarını gerekir emin değilseniz, ben tip tfields = TFieldSpec' ait Array 'gibi bir tür oluşturmak ve daha sonra alanları FFields' olarak özelliği de belirtebilirsiniz ediyorum: TFields'. –

+0

Başlığı yeniden adlandırdı ve alakasız kodu kaldırdı. Sorunu kesin olarak belirlemek için tüm birimi görmemize gerek yok. –

+0

Dizi türü veya daha doğrusu bir dizinleyici içeren bir özellik istediğinizden emin misiniz? – CodesInChaos

cevap

21

Kişisel limiti alıyor. GetField örneğin, bir tam sayı (Index) alır ve karşılık gelen TFieldSpec döndüren bir (özel) fonksiyonudur

function TTableSpec.GetField(Index: Integer): TFieldSpec; 
begin 
    result := FFields[Index]; 
end; 

the documentation on array properties Bkz Bu

property Fields[Index: Integer]: TFieldSpec read GetField; 

olmalıdır.

11

Andreas tarafından verilen INDEXED özellikleriyle ilgili cevabın, posterin aradığı çözüm olduğunu kabul ediyorum.

Tamlık için, gelecekteki ziyaretçiler için, bir özelliğin, türe seçildiği sürece dizi türüne sahip olabileceğini belirtmek isterim. Aynı kayıtlar, işaretçiler ve diğer türetilmiş türler için de geçerlidir.

type 
    tMyColorIndex = (Red, Blue, Green); 
    tMyColor = array [ tMyColorIndex ] of byte; 

    tMyThing = class 
    private 
     fColor : tMyColor; 
    public 
     property Color : tMyColor read fColor; 
    end; 
İlgili konular