Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
With
Ключевое слово
Средство упрощения ссылок к структурированным переменным unit
  
1 with data name do Statement;

2 with data name do
  begin
   Statement;
   {...}
  end;
Описание
Ключевое слово With - удобство, обеспеченное Delphi для того, чтобы сослаться на элементы сложной переменной, типа записи или объекта.

Это упрощает код, удаляя потребность в префиксе для каждого упомянутого элемента переменной со сложным именем.

Например:

myObject.colour:= clRed;
myObject.size:= 23.5;
myObject.name:= 'Fred';

может быть перезаписан:

With myObject do
begin
colour:= clRed;
size:= 23.5;
name:= 'Fred';
end;

Однако будьте осторожны, так как его использование может, к удивлению, сделать код более трудным для восприятия. А также это может создать такие проблемы, где изменение кода может подразумевать неправильный адресат для 'дочернего' поля, которое упоминают.
Примечания
В пределах предложения With, Delphi пробует решить эти 'неполные' ссылки, смотря сначала на адресат стоящий после With.

Затем просматриваются другие типы данных, типа локальных переменных, параметры подпрограмм и т.п. Это то, где начинаются некоторые опасности с ключевым With.

Используйте с осторожностью!
Похожие команды
Begin  Ключевое слово, которое начинает операторный блок

End  Ключевое слово, которое заканчивает операторные блоки

Record  Структурный тип данных содержащий поля данных

 
Пример кода : Использование ключевого слова with со структурой записи
type
  // Объявление записи клиента
  TCustomer = Record
    firstName : string[20];
    lastName  : string[20];
    address1  : string[100];
    address2  : string[100];
    address3  : string[100];
    city      : string[20];
    postCode  : string[8];
  end;

var
  John, Sarah : TCustomer;

begin
  // Установка подробностей клиента Джона
  With John do
  begin
    firstName := 'John';
    lastName  := 'Smith';
    address1  := '7 Park Drive';
    address2  := 'Branston';
    address3  := 'Grimworth';
    city      := 'Banmore';
    postCode  := 'BNM 1AB';
  end;

  // Установка подробностей сестры Джона - просто копируя целой записи
  Sarah := John;

  // И затем изменяем имя
  Sarah.firstName := 'Sarah';

  // Теперь показываем подробности обоих клиентов
  With John do ShowCustomer([firstName, lastName,
                             address1, address2, address3, city,
                             postCode]);
  With Sarah do ShowCustomer([firstName, lastName,
                             address1, address2, address3, city,
                             postCode]);
end;

// Процедура, которая отображает переменный число строк
procedure TForm1.ShowCustomer(const fields: array of string);
var
  i : Integer;

begin
  // Отображение всех переданных полей - примечание: массивы начинаются с 0
  for i := 0 to Length(fields)-1 do
    ShowMessage(fields[i]);
end;
John
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Sarah
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия