TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Область действия метода и параметр 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 "Руководства по язы-
              ку".

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz