TObject

TObject

TObject — класс, являющийся общим предком всех классов языка Object Pascal.

См. также: Free Pascal.

TObject инкапсулирует основное поведение всех классов в Object Pascal и отвечает за выделение и освобождение памяти при создании и удалении объектов.

 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;

Сам по себе TObject нельзя сериализовать, он не умеет ни сохранять в поток, ни загружать себя из потока.

Большая часть кода TObject написана на языке Ассемблер.

Содержание

TObject.Create

constructor TObject.Create;

Конструктор объекта. Используется для создания экземпляра класса TObject или его потомков. В базовом классе не делает ничего (пустой метод). Его следует переопределить в потомках для распределения дополнительных ресурсов, инициализации начальных значений полей, создания экземпляров объектов. Может быть виртуальным, но не динамическим.

Пример

 type
   TTestObject = class
   private
     FMyString: string;
   public 
     constructor Create;
     property MyString: string read FMyString write FMyString;  
   end;
 
 { TTestObject }
 
 constructor TTestObject.Create;
 begin
   FMyString := 'The string'; // инициализация строки
 end

TObject.Free

 procedure TObject.Free;

Безопасный метод освобождения ресурсов и уничтожения объекта. Если указатель на объект nil, аварийного заверщения не произойдет. В реализации метод Free вызывает виртуальный метод Destroy.

TObject.InitInstance

 class function TObject.InitInstance(Instance: Pointer): TObject;

Метод производит инициализацию экземпляра в памяти, при этом инициализируются поля, VMT, DMT. Параметр Instance должен содержать указатель на область памяти размером не меньше InstanceSize.

Используется непосредственно методом NewInsatnce, который вызывается встроенными средствами в конструкторе Create первым и единственный раз.

Строки инициализируются пустыми. Интерфейсы, объекты, указатели значениями NIL. Варианты — значением «Unassigned». Целые, вещественные, в том числе и Currency — «0».

TObject.CleanupInstance

procedure TObject.CleanupInstance;

Метод производит деинициализацию всех полей экземпляра объекта. Освобождаются ресурсы связанные с вариантами, строками, интерфейсами. Целые, дествительные и Currency устанавливаются в «0», указатели и варианты в NIL, динамические массивы очищаются.

Вызывается непостредственно в методе FreeInstance.

Пример использования NewInstance, InitInstance, FreeInstance, CleanupInstance

 type
   TMyStringList = class(TStringList)
   public
     class function NewInstance: TObject; override;
     procedure FreeInstance; override;
   end;
 
 { TMyStringList }
 
 procedure TMyStringList.FreeInstance;
 begin
   CleanupInstance; // Обязательно вызываем эту процедуру
   HeapFree(GetProcessHeap, 0, Self);
 end;
 
 class function TMyStringList.NewInstance: TObject;
 begin
   Result := InitInstance(HeapAlloc(GetProcessHeap, 0, InstanceSize));
 end;
 
 procedure TestObject;
 var
   List: TStringList;
 begin
   List := TMyStringList.Create;
   try
     List.Text := 'Объект создан и освобожден с использоанием стандартного менеджера память Windows.';
     List.SaveToFile('List.txt');
   finally
     List.Free;
   end;
 end;

TObject.ClassType

 function TObject.ClassType

Метод возвращает ссылку на класс объекта.

Например:

 var
   AnyObject: TObject;
 begin
   if AnyObject.ClassType = TAnyClass then
     // Какие-то действия
 end;

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "TObject" в других словарях:

  • Реализация АВЛ-дерева — Ниже предложены возможная программная реализация АВЛ дерева. Код класса на Object Pascal. unit mAVLTree; interface type TAVLTree = class; TAVLTreeNode = class (TObject) private FKey: Cardinal; FData: TObject; FBalance, FLeftBalance, FRightBalance …   Википедия

  • Delphi (язык программирования) — У этого термина существуют и другие значения, см. Delphi. Эта статья  о языке программирования. Об интегрированной среде разработки см. Delphi (среда разработки). Delphi …   Википедия

  • Magic pushbutton — The magic pushbutton is a common anti pattern in graphical programming environments.[1] In this scenario, the programmer draws the user interface first and then writes the business logic in the automatically created methods. In event driven… …   Wikipedia

  • Magic pushbutton — En computación el antipatrón de diseño magic pushbutton ocurre en el desarrollo de interfaces gráficas, cuando el programador construye primero la interfaz gráfica y luego las llamadas a la lógica de negocio se realizan en los huecos,… …   Wikipedia Español

  • Singleton — Para el término matemático, véase Conjunto unitario. El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en …   Wikipedia Español

  • Паскаль (язык программирования) — Эта статья или раздел нуждается в переработке. В Паскале нет модулей, ООП и прочих новомодных веяний. Описание расширений должно присутствовать только в статьях о соответ …   Википедия

  • Наследование (программирование) — Для улучшения этой статьи желательно?: Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное. У этого термин …   Википедия

  • Строитель (шаблон проектирования) — У этого термина существуют и другие значения, см. Строитель. Шаблон проектирования Строитель Builder Тип: порождающий Описан в Design Patterns Да Строитель (англ. Builder)  п …   Википедия

  • Магическая кнопка — В этом разделе не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка… …   Википедия

  • Introspección de tipos — En informática, la introspección de tipos es la capacidad de algunos lenguaje de programación orientado a objetos de determinar el tipo de un objeto en tiempo de ejecución. Esta es una característica notable de Objective C, y una característica… …   Wikipedia Español


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»