Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was bedeutet "class of" (https://www.delphipraxis.net/28736-bedeutet-class.html)

mytar 29. Aug 2004 15:47


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:
ListItemsClass = class of TListItems; //ein Beispiel
Kann mir das einer erklären?

[edit=sakura] Titel jetzt mal beispielhaft gestaltet. Mfg, sakura[/edit]

sakura 29. Aug 2004 16:03

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:
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;
Jetzt erstellen wir mal ein Form mit einem Button und einem Memo und fügen diesen Code ins Button-OnClick ein:

Delphi-Quellcode:
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;
Meistens wird diese Methode genutzt, wenn man ein Framework für eine Logik liefern will, aber nicht den Gesamtumfang beschränken will.

...:cat:...

mytar 29. Aug 2004 16:16

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 10:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz