2010-12-17 19 views
5

Önceden ne olduğunu bilmeden D2010'daki bir nesnenin üye değişkenlerini yinelemenin bir yolu var mı?Yineleme üye değişkenleri

+0

Delphi'nin hangi sürümünü kullanıyorsunuz? – RRUZ

+0

Delphi 2010 kullanıyorum. –

cevap

2

Evet, Delphi 2010 veya sonraki sürümünü kullanıyorsanız. Bir nesnenin alanları, yöntemleri ve özellikleri hakkında bilgi almak için genişletilmiş RTTI'yı kullanabilirsiniz. Basit versiyon:

procedure GetInfo(obj: TObject); 
var 
    context: TRttiContext; 
    rType: TRttiType; 
    field: TRttiField; 
    method: TRttiMethod; 
    prop: TRttiProperty; 
begin 
    context := TRttiContext.Create; 
    rType := context.GetType(obj.ClassType); 
    for field in rType.GetFields do 
    ;//do something here 
    for method in rType.GetMethods do 
    ;//do something here 
    for prop in rType.GetProperties do 
    ;//do something here 
end; 

gerekli nesneler RTTI biriminde bulunabilir.

Delphi'nin önceki sürümlerinde, bazı özellik ve yöntemlerle ilgili bazı bilgileri edinebileceğiniz bazı daha sınırlı RTTI var, ancak bu kadarını yapamaz.

+0

Yöntemler/alanlar/özellikler yayınlanmak zorunda mıdır yoksa normal olabilir mi? –

+0

@John: Varsayılan olarak, genişletilmiş RTTI tüm alanlar ve "public" veya "yayınlandı" özellikleri ve yöntemleri için oluşturulur. Bu, '{$ RTTI} 'derleyici yönergesi ile yazdığınız kodda değiştirilebilir, ancak bunların değiştirilmiş sürümlerini kullanmadıkça standart kütüphaneler için oldukça fazla pişirilir. (Mümkün, fakat resmen Embarcadero tarafından cesaretlendirildi.) –

+0

Hmm, Borland RTL'nin yeniden inşasına doğru oldukça arkadaş canlısıydı, politikaları yakın zamanda değiştirdiler mi? –