with-Anweisungen
Eine with-Anweisung stellt eine einfache und bequeme Möglichkeit dar, die Felder eines Records oder die Felder, Eigenschaften und Methoden eines Objekts zu referenzieren. Die Syntax für eine with-Anweisung lautet
Delphi-Quellcode:
with Objekt do Anweisung, oder
with Objekt1, ..., Objektn do Anweisung
Hierbei ist Objekt ein Ausdruck mit einer Referenz auf einen Record, eine Objektinstanz, eine Klasseninstanz, eine Interface- oder Klassentyp (Metaklassen)-Instanz. Anweisung ist eine einfache oder eine strukturierte Anweisung. Innerhalb von Anweisung brauchen Felder, Eigenschaften und Methoden von Objekt nur über ihren Bezeichner referenziert zu werden. Die Angabe von Qualifizierern ist nicht erforderlich.
Ausgehend von den Deklarationen
Delphi-Quellcode:
type
TDate = record
Day: Integer;
Month: Integer;
Year: Integer;
end;
var
OrderDate: TDate;
with OrderDate do
if Month = 12 then
begin
Month := 1;
Year := Year + 1;
end
else
Month := Month + 1;
if OrderDate.Month = 12 then
begin
OrderDate.Month := 1;
OrderDate.Year := OrderDate.Year + 1;
end
else
OrderDate.Month := OrderDate.Month + 1;
Wenn die Interpretation von Objekt die Indizierung von Arrays oder die Dereferenzierung von Zeigern verlangt, werden diese Aktionen einmal durchgeführt, bevor die Anweisung ausgeführt wird. Dies macht with-Anweisungen sowohl effizient als auch kurz. Außerdem können sich während der aktuellen Ausführung der with-Anweisung Zuweisungen an eine Variable innerhalb von Anweisung nicht auf die Interpretation von Objekt auswirken.
Jede Variablenreferenz und jeder Methodenname in einer with-Anweisung wird, wenn möglich, als Element des angegebenen Objekts bzw. Records interpretiert. Wenn in der with-Anweisung auf eine andere Variable oder Methode mit demselben Namen zugegriffen werden soll, ist ein Qualifizierer erforderlich:
Delphi-Quellcode:
with OrderDate do
begin
Year := Unit1.Year;
...
end;
Wenn auf with mehrere Objekte oder Records folgen, wird die gesamte Anweisung als Folge von verschachtelten with-Anweisungen behandelt. Die Anweisung:
with Objekt1, Objekt2, ..., Objektn do Anweisung
ist gleichbeudeutend mit
Delphi-Quellcode:
with obj1 do
with obj2 do
...
with objn do
// Anweisung
In diesem Fall wird jede Variablenreferenz und jeder Methodenname in Anweisung als Element von Objektn behandelt, wenn dies möglich ist. Andernfalls wird die Referenz bzw. der Name als Element von Objektn1 interpretiert usw. Dieselbe Regel gilt für die Interpretation der Objekte selbst. Ist beispielsweise Objektn sowohl ein Element von Objekt1 als auch von Objekt2, wird es als Objekt2.Objektn interpretiert