Название: | Путешествуя по TObject. Или как оно работает |
Просмотров: | 348 |
Раздел: | Информатика, программирование |
Ссылка: | Скачать(27 KB) |
Описание: | Каждый класс в Delphi является наследником TObject, и, соответственно, обладает всеми его свойствами и методами. Это, несомненно, полезный факт, но каковы его методы и свойства, каковы его основные свойства и как их можно использовать? |
|
Часть полного текста документа:Путешествуя по TObject. Или как оно работает Максим Игнатьев Каждый класс в Delphi является наследником TObject, и, соответственно, обладает всеми его свойствами и методами. Это, несомненно, полезный факт, но каковы его методы и свойства, каковы его основные свойства и как их можно использовать? Как мы увидим немного позже, очень многое в реализации TObject направлено на описание объектной модели Delphi. Рассмотрим его описание поподробнее. TObject = class constructor Create; procedure Free; class function InitInstance(Instance: Pointer): TObject; procedure CleanupInstance; function ClassType: TClass; class function ClassName: ShortString; class function ClassNameIs(const Name: string): Boolean; class function ClassParent: TClass; class function ClassInfo: Pointer; class function InstanceSize: Longint; class function InheritsFrom(AClass: TClass): Boolean; class function MethodAddress(const Name: ShortString): Pointer; class function MethodName(Address: Pointer): ShortString; function FieldAddress(const Name: ShortString): Pointer; function GetInterface(const IID: TGUID; out Obj): Boolean; class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry; class function GetInterfaceTable: PInterfaceTable; function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; virtual; procedure AfterConstruction; virtual; procedure BeforeDestruction; virtual; procedure Dispatch(var Message); virtual; procedure DefaultHandler(var Message); virtual; class function NewInstance: TObject; virtual; procedure FreeInstance; virtual; destructor Destroy; virtual; end; Сразу видны методы класса, а их функциональность, как известно, не зависит от факта существования экземпляра. Рассмотрим поподробнее каждый из методов. Сразу хочу оговориться, методы - конструкторы и деструкторы на самом деле являются операторами, то есть внутренними, не зависящими от их реализации в коде, конструкциями. Constructor Create; Все объекты создаются посредством вызова конструктора. Собственно конструктор не обязан называться Create, просто это принятое название данного метода. Конструктор на самом деле является методом класса, и в процессе его работы вызываются следующие методы: NewInstance InitInstance Create AfterConstruction На самом деле вызов этих методов происходит достаточно интересно. В TObject конструктор не выполняет никакой деятельности, однако, как корневой класс иерархии он создается на уровне RTM. Что же происходит? После вызова конструктора RTM вызывает метод NewInstance, который выделяет область в памяти, согласуясь при этом со значением vmtInstanceSize, которое формируется при компиляции. В рамках вызова NewInstance выполняется вызов InitInstance, который заполняет поля метода значениями, обозначенными в модификаторах default, далее выполняется код, описанный в теле процедуры Create (или той, что заявлена в качестве конструктора), после чего управление передается в точку, определенную в точке vmtAfterConstruction, которая по умолчанию указывает на метод AfterConstruction. Все эти манипуляции позволяют максимально упростить процесс гибкого создания экземпляра класса в рамках объектной модели Delphi. Таким образом, при создании экземпляра класса (объекта) вы можете "поприсутствовать" на любой его фазе. Смысл процедуры AfterConstruction состоит в том, чтобы выявить момент окончания конструирования класса. ............ |