logo search
Программирование в среде Delphy / Программирование в среде Delphi

18.2. Описание класса tObject

Все описание класса TObject полностью наследуются остальными классами. Рассмотрим более подробно этот класс:

TObject = class

constructor Create; // Функция создания объекта.

destructor Destroy; virtual; // Процедура разрушения объекта.

procedure Free; // Процедура освобождения памяти с предварительной // проверкой – а была ли ранее выделена память под объект?

Указатель на класс

TMyObject (4 байта)

Поле F1 (4 байта)

Поле F2 (21 байт)

Число динамических методов (2)

Индекс метода TMyObject.DM1

(-1)

Индекс метода TMyObject.DM2

(-2)

Адрес метода TMyObject.DM1

Адрес метода TMyObject.DM2

Указатель на объект

Obj1 (4 байта)

Описание класса TMyObject

(RTTI)

Адрес метода TMyObject.VM1

Адрес метода TMyObject.VM2

class function InitInstance(Instance: Pointer): TObject; // Классовая функция, // которая создает новый экземпляр объекта с занулением его полей и

// инициализации таблицы виртуальных методов. Эту функцию явно

// не вызывают, вместо нее для создания нового объекта вызывается

// метод NewInstance в конструкторе Create

class function NewInstance: TObject; virtual; // Классовая функция для

// создания нового объекта

procedure CleanupInstance; // Процедура освобождения памяти из–под

// длинных строк, переменных типа Variant и интерфейсов. Прямо ее

// не вызывают, она автоматически вызывается при вызове деструктора

procedure FreeInstance; virtual; // Процедура освобождения памяти,

// выделенной ранее объекту методом NewInstance, она вызывается

// автоматически при вызове деструктора.

function ClassType: TClass; // Функция, возвращающая ссылку на класс.

// Используется обычно в операторах is или as

class function ClassName: ShortString; // Классовая функция,

// возвращающая имя класса

class function ClassNameIs(const Name: string): Boolean; // Классовая

// функция, проверяющая принадлежность объекта к классу с именем

// Name

class function ClassParent: TClass; // Классовая функция, возвращающая

// указатель на родительский класс

class function ClassInfo: Pointer; // Классовая функция, которая

// возвращает указатель на описание класса – область RTTI

class function InstanceSize: Longint; // Классовая функция, которая

// возвращает длину объекта в байтах

class function InheritsFrom(AClass: TClass): Boolean; // Классовая

// функция для проверки условия – является ли данный класс

// наследником класса AClass

class function MethodAddress(const Name: ShortString): Pointer;

// Классовая функция, которая возвращает указатель на метод с именем

// Name

class function MethodName(Address: Pointer): ShortString; // Классовая

// функция, которая возвращает имя метода по его адресу

function FieldAddress(const Name: ShortString): Pointer; // Классовая

// функция, которая возвращает указатель на поле с именем Name

function GetInterface(const IID: TGUID; out Obj): Boolean; // Функция

// получения указателя на интерфейс с глобальным идентификатором IID.

// Если такой интерфейс присутствует в системе, то эта функция

// возвращает истину

class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;

// Классовая функция получения указателя на интерфейс с глобальным

// идентификатором IID

class function GetInterfaceTable: PInterfaceTable; // Классовая

// функция получения указателя на начало таблицы интерфейсов

function SafeCallException(ExceptObject: TObject;

ExceptAddr: Pointer): HResult; virtual; // Функция получения указателя

// на процедуру обработки исключительной ситуации, используя SafeCall

// соглашение при вызове подпрограмм

procedure AfterConstruction; virtual; // Метод, который будет вызываться

// после создания объекта

procedure BeforeDestruction; virtual; // Метод, который будет вызываться

// перед разрушениям объекта

procedure Dispatch(var Message); virtual; // Процедура диспетчеризации

// вызовов динамических методов c помощью Windows сообщений

procedure DefaultHandler(var Message); virtual; // Обработчик Windows

// сообщений по умолчанию

end;

Как видно из этого описания, большинство методов этого класса – классовые методы и их можно вызывать, даже не создав ни одного объекта, так как информация о классе создается еще на этапе проектирования проекта.