Конструкторы анонимных записей в delphi

Можно ли использовать записи в качестве параметра метода и вызывать их без неявного объявления экземпляра указанной записи?

Я бы хотел написать такой код.

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

procedure Foo(AClasses : array of TRRec);

затем вызываем метод как этот или что-то подобное.

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

Кстати, я все еще застрял на Delphi 5.

12 голосов | спросил Fritz Deelman 5 MarpmThu, 05 Mar 2009 15:16:52 +03002009-03-05T15:16:52+03:0003 2009, 15:16:52

2 ответа


0

Да. Почти.

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)]);
ответил dan-gph 5 MarpmThu, 05 Mar 2009 15:46:21 +03002009-03-05T15:46:21+03:0003 2009, 15:46:21
0

Также возможно работать с константным массивом, но он не настолько гибок, как решение, заданное "gangph": (особенно если вы должны указать размер ([0..1]) массива в объявлении массива. Записи аномальные, а массив - нет).

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.
ответил Name 5 MarpmThu, 05 Mar 2009 16:16:27 +03002009-03-05T16:16:27+03:0004 2009, 16:16:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132