Mit der WITH-Anweisung kann die Leistung des Programmes verbessert werden, falls mehrfach hintereinander auf ineinander verschachtelte Objekte zugegriffen werden muss.
* Verwende die WITH-Anweisung mehrfach
* hintereinander auf Eigenschaften des Objektes address
* innerhalb der Person zuzugreifen. LOCAL personObject
personObject = createobject("PersonClass")
* Eigenschaften lesen WITH personObject.address
? .street
? .zipCode ENDWITH
DEFINECLASS PersonClass AS Custom FUNCTION Init THIS.address= createobject("AddressClass") ENDFUNC
address = .null. ENDDEFINE
DEFINECLASS AddressClass AS Custom
street = ""
zipCode = "" ENDDEFINE
SomeStreet 1 12345
Kompatiblität mit FoxPro
Das WITH...ENDWITH-Konstrukt funktioniert in DO anders als in FoxPro und ist nicht
vollständig kompatibel. So ist es in FoxPro so, dass auch in Unterfunktionsaufrufen
noch relative Pfade ".someprop" verwendet werden können. In DO sind diese Referenzen
allerdings nur in dem Stapelrahmen gültig in dem sich auch das WITH...ENDWITH-Konstrukt
befindet.
Der folgende Code funktioniert in FoxPro, führt allerdings in DO zum einem Kompilerfehler.
1 2 3 4 5 6 7 8 9
LOCAL o
o = createobject("Custom") WITH o
someFunction() ENDWITH
FUNCTION someFunction
.Tag = "HelloWorld" ENDFUNC
(Compiler error) 1940 - Expression is not valid outside of WITH/ENDWITH. in /runtime/builddir/runme.prg, line 8, column 3, somewhere at: .Tag