Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
15. Feb 2005
Also im Grunde so etwas: (?)
procedure GenerateInstance(Liste: TList);
var
p: ^TDeineKlasse;
begin
p^ := TDeineKlasse.Create;
Liste.Add(Pointer(p));
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
11. Feb 2005
Naja, so richtig nicht. Man kann es in der Laufzeit etwas optimieren, da der "as"-Operator nochmals eine "is"-Prüfung macht. So wie du es machst, bist du zum Zeitpunkts des Casts ja schon sicher die richtige Klasse in der Hand zu haben -> direkt casten:
if Class is TBaseClass then
TBaseClass(Class).Tuwas
else if Class is TDerivedClass then
TDerivedClass(Class).Tuwas;
Ich hab...
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
10. Feb 2005
Klar, das geht. Das "Gehampel" mit dem Pointer könntest du dir sogar sparen.
procedure Foo(Class: TBasicClass);
begin
...
end;
procedure Tuwas;
var MyClass:TDerivedClass;
begin
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
10. Feb 2005
Korrekt. Hab ich befürchtet dass du das so meintest ;). Der Typ der übergebenen Variable muss mit dem im Prozedurkopf übereinstimmen. Das geht sogar so weit, dass ein und die selbe Deklatation in 2 unterschiedlichen Units nicht den selben Typ darstellen!
Bei deinem Vorhaben würdest du glaub ich um untypisierte Pointer nicht umher kommen. Dann wird das ganze ähnlich unschön wie in C :D
Wird...
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
10. Feb 2005
Ich schreibe mal, wei ich das jetzt verstanden habe :)
type
TBaseClass = class(TObject);
.
.
end;
TDerived = class(TBaseClass);
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
10. Feb 2005
Mit eine var-Parameter wird automatisch die Adresse übergeben, und keine Kopie angelegt.
procedure(var DeinArray: TDeinArrayTyp);
begin
.
.
.
end;