На этом шаге мы рассмотрим методы класса TObject.
Класс TObject инкапсулирует основные функции, свойственные всем объектам Delphi. Интерфейс TObject обеспечивает:
Все классы в Delphi являются прямыми или косвенными наследниками TObject. Прямое наследование используется только при объявлении простых классов, объекты которых не являются компонентами, не могут присваиваться друг другу и не участвуют в операциях обмена с потоками. Подавляющее большинство классов являются косвенными наследниками TObject и образуются от производных классов. Если при объявлении нового типа объектов не указывается класс-предок, то Delphi считает TObject предком нового класса.
Во всех объектах, которые используются в программах, допустимо применять методы, определенные в классе TObject. Перечислим основные из них (таблица 1):
| Метод | Описание |
|---|---|
| constructor Create; | Конструктор. Создает новый экземпляр объекта и инициирует обработчик исключительных ситуаций. Не осуществляет инициализацию каких-либо данных, поэтому перегружается в классах-наследниках. |
| destructor Destroy; virtual; | Деструктор. Производит действия по уничтожению экземпляра объекта. Рекомендуется вызывать не Destroy, а Free. |
| procedure Free; | Уничтожает объект и освобождает выделенную под него память. Автоматически вызывает Destroy, если объект существует. |
| class function NewInstance: TObject; virtual; | Выделяет область памяти под объект и возвращает указатель на нее. Автоматически вызывается всеми конструкторами. Использует InstanceSize. Может перегружаться в классах-наследниках. |
| class procedure InitInstance (Instance: Pointer) : TObject; | Инициализирует экземпляр объекта и указатель на его таблицу виртуальных методов. Вызывается автоматически методом NewInstance. Не может быть перегружен. |
| procedure FreeInstance; virtual; | Освобождает память, выделенную ранее методом NewInstance. Автоматически вызывается деструктором Destroy. Непосредственный вызов пользователем не требуется. Должен быть перегружен, если перегружен метод NewInstance. Использует InstanceSize для определения размера выделенной области памяти. |
| function ClassType: TClass; | Возвращает указатель на класс вызвавшего объекта. |
| class function ClassName: string; | Возвращает строку с именем класса. |
| class function ClassParent: TClass; | Возвращает указатель на класс-предок. |
| class function ClassInfo: Pointer; | Возвращает указатель на структуру, содержащую информацию о классе. |
| class function InstanceSize: LongInt; | Возвращает размер экземпляра объекта. |
| class function InheritsFrom(AClass: TClass): Boolean; | Проверяет, является ли данный класс порожденным от класса AClass и возвращает соответствующее логическое значение. |
| class function ClassNameIs(const Name: string): Boolean; | Возвращает True, если передаваемое в функцию имя совпадает с именем данного класса. |
| class function MethodAddress (const Name: string): Pointer; | Возвращает адрес метода вызвавшего объекта с заданным именем. |
| class function MethodName(Address: Pointer): string; | Возвращает имя метода с заданным адресом. |
| function FieldAddress (const Name: string): Pointer; | Возвращает адрес поля вызвавшего объекта с заданным именем. |
На следующем шаге мы рассмотрим состав класса TComponent.