Anonymous Nehmen Bauer in delphi
-
03-07-2019 - |
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.
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