Описание |
Ключевое слово 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
|
|