![]() |
Was bedeutet "class of"
Ich hab jetzt kürzlich mal in den Units herumgestöbert die Delphi beiliegen.
Ich hab dann soetwas gefunden:
Delphi-Quellcode:
Kann mir das einer erklären?
ListItemsClass = class of TListItems; //ein Beispiel
[edit=sakura] Titel jetzt mal beispielhaft gestaltet. Mfg, sakura[/edit] |
Re: class of
Das wird genutzt, wenn eine Klasse (A) später Objekte (Y, Z) erstellen muss, die von einem bestimmten Typ (X) abgeleitet wurden. Ein kurzes Beispiel:
Delphi-Quellcode:
Jetzt erstellen wir mal ein Form mit einem Button und einem Memo und fügen diesen Code ins Button-OnClick ein:
type
// das ist Typ X TGeometry = class public function MyName: String; virtual; abstract; end; TGeometryClass = class of TGeometry; // das ist Klasse A TGeometryMaker = class private FCurrentGeometryClass: TGeometryClass; public function GetNextGeometry: TGeometry; property CurrentGeometryClass: TGeometryClass read FCurrentGeometryClass write FCurrentGeometryClass; end; function TGeometryMaker.GetNextGeometry: TGeometry; begin Result := CurrentGeometryClass.Create; end; type // Typ Y (von X abgeleitet) TRectangle = class(TGeometry) public function MyName: String; override; end; function TRectangle.MyName: String; begin Result := 'na Rechteck!'; end; type // Typ Z (von X abgeleitet) TCircle = class(TGeometry) public function MyName: String; override; end; function TCircle.MyName: String; begin Result := 'Ich bin ein Kreis.'; end;
Delphi-Quellcode:
Meistens wird diese Methode genutzt, wenn man ein Framework für eine Logik liefern will, aber nicht den Gesamtumfang beschränken will.
procedure TForm2.Button1Click(Sender: TObject);
var Geo: TGeometry; begin // jetzt erstellen wir unsere Klasse, welche uns später objekte vom typ // TGeometry zurück liefert with TGeometryMaker.Create do try // als erstes erstellen wir ein rechteck CurrentGeometryClass := TRectangle; Geo := GetNextGeometry; try Memo1.Lines.Add(Geo.MyName); finally Geo.Free; end; // jetzt noch einen kreis CurrentGeometryClass := TCircle; Geo := GetNextGeometry; try Memo1.Lines.Add(Geo.MyName); finally Geo.Free; end; finally Free; end; end; ...:cat:... |
Re: class of
Ich verstehes jetzt langsam,
muss es noch ein wenig vertiefen! Danke jedenfalls, Sakura! :corky: Für mich ist die ganze Sache [Erledigt]! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz