Область действия метода и параметр Self
─────────────────────────────────────────────────────────────────
Заметьте, что ни в одном из предыдущих примеров конструкция:
with объект do... не встречается в явном виде. Поля данных объек-
та легко доступны с помощью методов объекта. Хотя в исходном коде
поля данных объекта и тела методов разделены, на самом деле они
совместно используют одну и ту же область действия.
Именно поэтому один из методов TEmployee может содержать
оператор GetTitle := Title без какого-либо квалификатора перед
Title. И именно поэтому Title принадлежит тому объекту, который
вызывает метод. Если объект вызывает метод, то выполняется неяв-
ный оператор with myself do method, связывающий объект и его ме-
тоды в области действия.
B.Pascal 7 & Objects /UG - 206 -
Неявный оператор with выполняется путем передачи невидимого
параметра методу всякий раз, когда этот метод вызывается. Этот
параметр называется Self и в действительности является 32-разряд-
ным указателем на экземпляр объекта, осуществляющего вызов мето-
да. Относящийся к TEmployee метод GetRate приблизительно эквива-
лентен следующему:
function TEmployee.GetRate(var Self: TEmployee): integer;
begin
GetRate := Self.Rate;
end;
Примечание: Синтаксически этот пример не совсем кор-
ректен. Он приведен только затем, чтобы дать вам более пол-
ное представление о специфической связи между объектом и
его методом.
Но важно ли вам знать о существовании параметра Self? Обычно
нет. Генерируемый Borland Pascal код выполняет все это автомати-
чески. Однако в некоторых немногочисленных случаях вы можете за-
хотеть проникнуть внутрь метода и использовать параметр Self яв-
но.
Примечание: Явное использование параметра Self допуска-
ется, но вы должны избегать ситуаций, в которых это требует-
ся.
Параметр Self является частью физического кадра стека при
всех вызовах методов. Методы, используемые как внешние на языке
Ассемблера, должны учитывать Self при получении доступа к пара-
метрам метода в стеке.
Примечание: Более подробно об использовании методом
границ стека рассказывается в Главе 22 "Руководства по язы-
ку".