Zitat von
oki:
Die Klasse eines instanziierten Objektes kann man nicht ändern.
Man kann schon
, aber man kann sich damit auch gewaltig in den Fuß schiesen.
Es ist auch möglich, dass der Trick nach dem Wechsel des Compiler nicht mehr funktioniert.
Die neue Klasse muss vor der bisherigen Klasse abgeleitet sein und ausserdem darf die abgeleitete Klasse keine
zusätzlichen Felder haben.
Delphi-Quellcode:
procedure ChangeClass(obj : TObject; NewClass:TClass);
type PClass = ^TClass;
begin
if Assigned(obj)
and (obj.ClassType <> NewClass)
then
begin
if obj.ClassType <> NewClass.ClassParent
then
raise Exception.CreateFmt('
can''
t change Object of class %s to class %s', [obj.ClassName, NewClass.ClassName]);
if obj.InstanceSize <> NewClass.InstanceSize
then
raise Exception.CreateFmt('
Class %s - invalid instance size', [NewClass.ClassName]);
PClass(obj)^ := NewClass;
end;
end;