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
 



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