- 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.