Показать сообщение отдельно
  #6  
Старый 18.11.2015, 23:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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.
Ответить с цитированием