Delphi 2010 ve RTTI kullanarak, bir nesnenin sınıf türünü ve bir nesnenin özelliklerinin türünü ve türünü nasıl elde edeceğinizi/ayarlayacağımı bilirim, ancak hangi sınıfın miras zinciri bir mülkten mi geldi? Bir ana sınıfın özelliklerini ana sınıftan farklı kullanmak istiyorum.Delphi RTTI: Özellik sınıfını alın
TClassBase = class(TObject)
published
property A: Integer;
end;
TClassDescendant = class(TClassBase)
published
property B: Integer;
end;
procedure CheckProperties(Obj: TObject);
var
ctx: TRttiContext;
objType: TRttiType;
Prop: TRttiProperty;
begin
ctx := TRttiContext.Create;
objType := ctx.GetType(Obj.ClassInfo);
for Prop in objType.GetProperties do begin
if Prop.GetClassType is TClassBase then
// do something special with base class properties
else
// standard functionality on all other properties
end;
end;
sorun özellikleri için hiçbir GetClassType yoktur geçerli:
bu kodu düşünün. ClassType, mülkün ait olduğu sınıfın adı yerine, yalnızca TRttiInstancePropertyEx değerini döndürür.
Sorunuz biraz kafa karıştırıcı. Lütfen ayrıl. Hangi EXACTLY arıyorsunuz? Obj.PropertyName ''TClassDescendant' örneğine karşı bir' TClassBase' örneği olan bir nesne döndürüp döndürmediğini belirlemeye mi çalışıyorsunuz? Yoksa, Obj.PropertyName öğesinin, döndürülmüş nesne örneğinin uyguladığı sınıf türünden bağımsız olarak "TClassBase" olarak bildirilmiş olup olmadığını belirlemeye mi çalışıyorsunuz? TClassBase' ve 'TClassDescendant' kontrol ettiğiniz nesne (ler) tarafından nasıl kullanılır? –
"Miras zincirinde hangi sınıfın nereden geldiğini nasıl belirlersiniz" veya TClassBase veya TClassDescendant'daki özellikleri bilmek isterim. Bir sınıfın özelliklerini geçerken, temel sınıf özelliklerini göz ardı etmek istiyorum. Benim özel durumumda, TInterfacedObject'ten bir sınıf aldım ve [Ignore] özelliğine sahip olmadıkça tüm özelliklerde bir işlev yapıyorum, ancak aynı zamanda TInterfacedObject öğesinden RefCount'u da kolayca göz ardı etmek istiyorum. –
Geçerli özelliğin belirli bir sınıfta var olup olmadığını kontrol etmek yerine, numaralandırılan nesnenin amaçlanan sınıf olup olmadığını kontrol etmek daha mantıklı olacaktır. Uygulanması ve daha doğru olması çok daha kolay olurdu. –