Реферат: Путешествуя по TObject. Или как оно работает
BeforeDestruction
FreeInstance
Метод FreeInstance вызывает каскад процедур, направленных на освобождение всех захваченных ресурсов, в том числе и динамических массивов, Variant типов и многого другого. Это должно быть полезно при возникновении исключительных ситуациях в конструкторе при уже созданных внутренних динамических структурах. Это также весьма полезно как механизм сбора мусора внутри объекта.
class function InitInstance(Instance: Pointer): TObject;
Функция инициализации экземпляра информацией из VMT, при этом учитывается использование интерфейсов при наследовании. Важно обратить внимание на то, что это функция класса, фактически эта функция заполняет болванку объекта, созданную функцией NewInstance.
Procedure CleanupInstance;
Процедура возврата экземпляра к «девственному» содержанию. При этом используются информация, хранящаяся в vmtInitTable и в vmtParent.
Function ClassType: TClass;
Возвращает класс объекта. А если быть более точным, то возвращается непосредственно указатель на VMT.
class function ClassName: ShortString;
Возвращает название класса. Используется VMT.
class function ClassNameIs(const Name: string): Boolean;
Выполняет сверку названия с названием необходимого класса. Используется при выполнении оператора is.
class function ClassParent: TClass;
Отдает указатель на родительский класс. Используется при выполнении оператора is.
class function ClassInfo: Pointer;
Возвращает указатель на RTTI информацию о классе. Если класс скомпилирован без использования директивы $M+, то возвращается nil.
class function InstanceSize: Longint;
Размер экземпляра. Как видно из описания информация о размере и о RTTI хранится в VMT вне привязки к конкретному экземпляру. Судя по всему, эта информация формируется во время компиляции.
class function InheritsFrom(AClass: TClass): Boolean;
Возвращает точное указание на то, что данный класс унаследован от искомого. Эта функция сканирует VMT и родителей этого VMT на соответствие указанному классу.
class function MethodAddress(const Name: ShortString): Pointer;
Сканирует VMT на наличие метода и при удачном результате возвращает указатель но него. При не нахождении метода в "родной" VMT сканируется VMT родителя и так до тех пор, пока не будет найден (или не найден) адрес метода. Таким образом осуществляется реализация метаморфизма в объектной модели Delphi.
class function MethodName(Address: Pointer): ShortString;
Функция обратна предыдущей.
Function FieldAddress(const Name: ShortString): Pointer;
Доступ к полям. Возвращает указатель на поле. Как всегда использует VMT.
Function GetInterface(const IID: TGUID; out Obj): Boolean;
Используется при наследовании интерфейсов и возвращает интерфейс указываемого IID.