В Delphi существуют понятия, принципиально
В Delphi существуют понятия, принципиально новые для уже существующих объектно-ориентированных реализаций Pascal. К числу этих понятий относятся свойства, функция класса
и объектная ссылка.
В Object Pascal добавлена возможность определения полей процедурного типа. Очевидно, что в теле функций привязываемых к этим полям, разработчику необходим доступ к другим полям объекта, методам и т.п. Возможность такого доступа базируется на передаче в эти функции неявного, но доступного в их коде, параметра, автоматически принимающего значение поля объекта Self. Такие функции называются функциями классов. Для объявления функций классов необходимо использовать специальную конструкцию function ... of object.
Delphi позволяет вам создать специальный описатель объектного типа (именно типа, а не на экземпляра !), известный как object reference
- объектная ссылка.
Объектные ссылки используются в следующих случаях:
-
тип создаваемого объекта не известен на этапе компиляции
-
необходим вызов метода класса, чей тип не известен на этапе компиляции
-
в качестве правого операнда в операциях проверки и приведения типов с использованием is
и as (о них мы будем говорить при обсуждении механизмов RTTI в главе 1.4)
Объектная ссылка определяется с использованием конструкции class of... . Приведем пример объявления и использования class reference:
type
TMyObject = class (TObject)
MyField:TMyObject;
constructor Create;
end;
TObjectRef = class of TObject;
...
var
ObjectRef:TObjectRef;
s:string;
begin
ObjectRef:=TMyObject; {присваиваем тип, а не экземпляр !}
s:=ObjectRef.ClassName; { строка s содержит ‘TMyObject’ }
end;
Таким образом в Delphi определена специальная ссылка TClass, совместимая по присваиванию с любым наследником TObject. Аналогично объявлены TPersistentClass
и TComponentClass.
Методы в новой объектной модели используют те же соглашения о вызовах, что и обычные процедуры или функции, за некоторыми исключениями. "Ключом" внутренней организации вызовов методов объектов является тот факт, что для каждого метода, в дополнение к объявленным параметрам, передается неявный параметр Self, который описан для каждого класса или экземпляра объекта. Параметр Self всегда передается последним и представляет собой указатель. Для обычных методов, Self - указатель на экземпляр объекта, для методов классов - это указатель на Таблицу Виртуальных Методов (VMT). Например, для данного объявления:
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий