#delphi #generics
Вопрос:
Закрытая секция :
type
TWorkOwner = (woClient,woServer);
TWorkData = record
Owner : TWorkOwner;
AMessage : string;
MsgID : integer;
end;
WorkFlow : TQueue<TWorkData>;
WorkData : TWorkData;
Затем я хочу добавить элементы типа WorkData в эту очередь следующим образом :
WorkData.Owner:=woClient;
WorkData.AMessage:='LogOn';
WorkData.MsgID:=MsgID;
WorkFlow.Enqueue(WorkData);
Это работает, но я хотел бы (если возможно) напрямую ставить рабочие данные в очередь, как это (псевдокод) :
WorkFlow.Enqueue(woClient,'LogOn',MsgID);
Это , очевидно, не работает, я попробовал несколько разных подходов, но я не могу понять, как это установить, если это вообще возможно.
Спасибо.
Ответ №1:
Самый простой подход-добавить конструктор в запись, которая принимает эти параметры:
type
TWorkData = record
Owner: TWorkOwner;
AMessage: string;
MsgID: integer;
public
constructor Create(AOwner: TWorkOwner; const AAMessage: string; AMsgID:
integer);
end;
constructor TWorkData.Create(AOwner: TWorkOwner; const AAMessage: string;
AMsgID: integer);
begin
Owner := AOwner;
AMessage := AAMessage;
MsgID := AMsgID;
end;
WorkFlow.Enqueue(TWorkData.Create(woClient,'LogOn',MsgID));
Ответ №2:
Вы можете определить конструктор вашей записи, что-то вроде этого:
constructor Create(AOwner: TWorkOwner; AMessage: string; AMsgID: integer);
А потом Enqueue
вот так:
WorkFlow.Enqueue(TWorkData.Create(woClient,'LogOn',MsgID));
P.S. Никогда не пробовал этого, я использую классы в таких сценариях.
Комментарии:
1. оба ответа верны и пригодны для использования 🙂 спасибо. К сожалению, я могу отметить только один ответ в качестве ответа.