Frage

Ist es möglich, Einträge als Methodenparameter zu verwenden, und es aufrufen, ohne implizit eine Instanz des Datensatzes erklärt?

Ich möchte in der Lage sein, Code wie diesen zu schreiben.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);

dann die Methode so oder so ähnlich nennen.

Foo([('Button1', TButton), ('Lable1', TLabel)]);

Ich bin immer noch steckt auf Delphi 5 durch die Art und Weise.

War es hilfreich?

Lösung

Ja. Fast.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

function r(i: string; c: TClass): TRRec;
begin
  result.ident     := i;
  result.classtype := c;
end;

procedure Foo(AClasses : array of TRRec);
begin
  ;
end;

// ...
Foo([r('Button1', TButton), r('Lable1', TLabel)]);

Andere Tipps

Es ist auch möglich, mit einem const-Array zu arbeiten, aber es ist nicht so flexibel wie die Lösung von „gangph“ gegeben: (Vor allem, dass Sie die Größe geben ([0..1]) der Anordnung in der Array-Deklaration. Die Aufzeichnungen sind anomymous, das Array ist nicht).

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);
begin
end;

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton),
                                   (ident:'Lable1'; classtype:TLabel));

Begin
  Foo(tt);
end.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top