Hej,
Jeg har en lang række klasser som alle nedarver fra en "parent-klasse". 
I denne parentklasse har jeg en funktion som gerne skulle behandle data 
i underklasserne(dvs læse properties i underklasserne og derefter udføre 
bestemte handlinger afhængig heraf)...
Simplificeret eksempel:
TParent = class
public
  Procedure DoStuff;
end;
TChild1 = class(TParent)
  FSomeOne: string
published
  property SomeOne: string read FSomeOne;
end;
TChild2 = class(TParent)
  FSomeTwo: string
published
  property SomeTwo: string read FSomeTwo;
end;
Say at jeg nu ønsker at DoStuff skal give lave en ShowMessage() for hver 
publiseret string-property så ville jeg kalde:
var
  MyChild1: TChild1;
  MyChild2: TChild2;
begin
  MyChild1.DoStuff;
  MyChild2.DoStuff;
end;
....nu begynder det så at blive en smule kringlet:
procedure DoStuff;
var
  Count, Loop: Integer;
  List: PPropList;
begin
  Count := GetPropList(ClassInfo, tkProperties, nil) ;
  GetMem(List, Count * SizeOf(PPropInfo)) ;
  try
    GetPropList(ClassInfo, tkProperties, List) ;
    for Loop := 0 to Pred(Count) do
    begin
      showmessage(List[Loop]^.Name);
    end;
  finally
    FreeMem(List, Count * SizeOf(PPropInfo))
  end;
end;
Jeg ville så forvente at få to message-bokse, en der indeholder 
"SomeOne" og den anden der indeholder "SomeTwo"...
MEN! ClassInfo dutter ikke. Hvis jeg derimod "snyder" lidt og henter 
ClassInfo-pointeren med fra mine childobjecter går det fint...Lidt ala 
nedenstående(i praksis har jeg løst det ved at tilføje et argument til 
constructoren på parentklassen):
var
  MyChild1: TChild1;
  MyChild2: TChild2;
begin
  MyChild1.DoStuff(MyChild1.ClassInfo);
  MyChild2.DoStuff(MyChild2.ClassInfo);
end;
procedure DoStuff(FClassInfo: PTypeInfo);
var
  Count, Loop: Integer;
  List: PPropList;
begin
  Count := GetPropList(FClassInfo, tkProperties, nil) ;
  GetMem(List, Count * SizeOf(PPropInfo)) ;
  try
    GetPropList(FClassInfo, tkProperties, List) ;
    for Loop := 0 to Pred(Count) do
    begin
      showmessage(List[Loop]^.Name);
    end;
  finally
    FreeMem(List, Count * SizeOf(PPropInfo))
  end;
end;
Så bliver alt som det skal være og jeg får mine to message-bokse
MEN jeg synes ikke dette er særlig "kønt" og jeg tvivler ærlig talt på 
at jeg har gjort det rigtigt

 Hvordan kan jeg slippe uden om at skulle 
sende child-klassens runtime objektinformation med til parentklassens 
funktioner?
Jeg er helt grøn i det her så det er muligt at ovenstående er skudt helt 
i hampen, så må i endelig sige til
 
PS: ovenstående er voldsomt simplificeret i forhold til den aktuelle 
situation, men principperne er det samme...
På forhånd tak...
MVH
  Thomas