Thema: Delphi Was bedeutet "class of"

Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: class of

  Alt 29. Aug 2004, 16:03
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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat