1. record - объявление пользовательской струкруры данных. Например, у тебя есть твой пакет. Его можно представить как строку данных, где разные значения разделены какми-то разделителем (или просто определяются по длинне). Но тогда каждый раз, когда тебе надо получить значение какого-либо параметра, тебе надо разбирать эту строку (ну есть еще хитрые способы, но хотя бы один раз парсить ее придется). Вот тут и приходит на помощь record. Ты внутри определяешь отдельные поля, а дальше, при использовании, обращаешься к ним напрямую по имени:
Код:
type
TNetPacket=record
macFrom : String;
macTo : String;
Data : String;
Ctrl : Integer;
end;
Вот здесь я описал поля для MAC-адреса источника, MAC-адреса приемника, данных и контрольной суммы. Теперь, если мне надо найти ("на" роутере, в таблице клиентов) соотв. приемник и передать ему этот пакет, то:
Код:
procedure TRouter.recv(Data : TNetPacket);
var
I : Integer;
begin
For I := 0 To FClients.Count-1 Do
If Data.macTo = FClients[i] Then
Begin
(FClients.Objects[i] As TComputer).recv(Data);
Break;
End;
end;
2. constructor Create; virtual;
Здесь еще все проще, просто объявляю конструктор класса виртуальным. В данном случае, при создании класса TRouter мне надо:
а) Обеспечить, что бы невозможно было создать не контролируемый экземпляр класса, что достигается помещением конструктора в секцию protected.
б) Объявить его виртуальным. По большому счету, это просто что бы Дельфи не ругалась, со статическим тоже все будет работать, но тогда компилятор будет выдавать предупреждение.
в) Собственно, конструктор нужен, что бы создать экремпляр класса TStringList вместе с созданием самого объекта класса TRouter.