Zitat von
Jelly:
Zitat von
Delphi Hilfe:
TClass = class of TObject;
Wenn Sie in der Deklaration eines Klassentyps keinen Vorfahren angegeben, erbt die Klasse direkt von TObject. Aus diesem Grund ist die Deklaration
Delphi-Quellcode:
TMyClass = class
...
end;
identisch mit
Delphi-Quellcode:
type TMyClass = class(TObject)
...
end;
Die zweite Variante verdient jedoch aus Gründen der Lesbarkeit den Vorzug.
Das interpretier ich als ganz deutlich, daß TObject der Urvater aller Klassen ist, und jede Klasse mindestens von TObject abgeleitet ist.
Das schon. Aber eine 'Class' ist nicht von TObject abeleitet, sondern nur der Klassentyp.
Deswegen steht da ja auch:
TClass = class of TObject;
, wobei es hier auf das 'class of' ankommt.
Zur ClassList bzw. ObjectList:
Delphi-Quellcode:
TMyClass = Class(TObject)
end;
TMyClassClass = class of TMyClass;
...
var
i: integer;
Klassen: TClassList;
Objekte: TObjectList;
begin
Klassen := TClassList.Create;
i := Klassen.Add(TMyClassClass);
Objekte := TObjectList.Create;
Objekte.Add( Klassen[i].Create );
end;
Das hat zur Folge, das in der Liste Objekte nun genau ein Element vom Typ TMyClass ist, das über ein Element der Liste Klasse vom Typ TMyClassClass instanziert wurde.
TClassList wird daher auch gerne für ClassFactories eingesetzt.