Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Klassentyp zur Laufzeit ändern

  Alt 25. Mär 2009, 11:06
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;
Andreas
  Mit Zitat antworten Zitat