A programban több osztáyl is lenne. Ezen osztályok szülője mindig a TAlap lenne.
A TAlap konstuktorában adnék kezdőértéket az osztály propertyjeinek.
A programban így hívom meg.
var
O: TOsztaly;
begin
O:= TOsztaly.Create();
O.Free;
end;
A konstruktoran így néz ki.
constructor TAlap.Create();
var lType : TRttiType;
lContext : TRttiContext;
lField: TRttiField;
lProperty, pProp : TRttiProperty;
sl: TStringList;
v: TValue;
begin
SL := TStringList.create;
lContext := TRttiContext.Create();
LType := lContext.GetType(Self.ClassType);
if assigned(LType) then
begin
for LProperty in LType.GetProperties do
begin
if (lProperty.Name = 'Name') then begin
pProp := lType.GetProperty(lProperty.Name);
if assigned(pProp) then
pProp.SetValue(Self,TValue.From<string>('Pista'));
end;
SL.Add(lProperty.Name+' - '+lProperty.GetValue(Self).ToString);
end;
end;
ShowMEssage(sl.Text);
sl.Free;
end;
Az elgondolás szerintem jól működik, mert amikor elindul a program, akkor látom a listában a TOsztaly propertyjeit.
A probléma, a pProp.SetValue parancsnál kezdődik, mivel 'Invalid class typecast' hibaüzenetet kapok.
Az lProperty.Name jót ad vissza 'Name'. A meglepetés akkor ért, amikor a megnéztem mi a property tipusa.
A pProp.PropertyType.TypeKind => tkClass értéked ad vissza a Name propertyre? Nem tkString vagy tkWString-et kellene visszaadnia?
Mit ronthatok el? A getValue elvileg mindenhol (empty)-t ad vissza, ez logikusnak tűnik, mivel semminek nincs kezdőértéke.