Читайте также:
|
|
Наследование – возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы.
Иерархия – набор классов, связанных отношением наследования. Наследование призвано отобразить такое свойство реального мира, как иерархичность.
Порожденный класс (потомок) – класс, который наследует атрибуты другого класса.
Базовый класс (предок) – класс, от которого происходит наследование.
Примером иерархии классов является библиотека VCL; с ее помощью в среде Delphi обеспечивается разработка GUI-приложений.
Существование «прародителя» всех классов
В языке Delphi существует предопределенный класс TObject, который служит неявным предком тех классов, для которых предок не указан. Это означает, что объявление
type type
TTextReader = class ~ TTextReader = class(TObject)
... …
end; end;
Класс TObject – корень любой иерархии классов. Он содержит ряд методов, которые по наследству передаются всем остальным классам. Среди них конструктор Create, деструктор Destroy, метод Free и некоторые другие методы.
TObject = class
constructor Create;
procedure Free;
class function InitInstance(Instance: Pointer): TObject;
procedure CleanupInstance;
function ClassType: TClass;
class function ClassName: ShortString;
class function ClassNameIs(constName: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer;
class function InstanceSize: Longint;
class function InheritsFrom(AClass: TClass): Boolean;
class function MethodAddress(constName: ShortString): Pointer;
class function MethodName(Address: Pointer): ShortString;
function FieldAddress(constName: ShortString): Pointer;
function GetInterface(constIID: TGUID; out Obj): Boolean;
class function GetInterfaceEntry(constIID: 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;
Create – стандартный конструктор.
Free – уничтожает объект: вызывает стандартный деструктор Destroy, если значение псевдопеременной Self не равно nil.
InitInstance(Instance: Pointer): TObject – при создании объекта инициализирует нулями выделенную память. На практике нет необходимости вызывать этот метод явно.
CleanupInstance – освобождает память, занимаемую полями с типом string, Variant, динамический массив и интерфейс. На практике нет необходимости вызывать этот метод явно.
ClassType: TClass – возвращает описатель класса (метакласс).
ClassName: ShortString – возвращает имя класса.
ClassNameIs(const Name: string): Boolean – проверяет, является ли заданная строка именем класса.
ClassParent: TClass – возвращает описатель базового класса.
ClassInfo: Pointer – возвращает указатель на соответствующую классу таблицу RTTI (от англ. Runtime Type Information). Таблица RTTI используется для проверки типов данных на этапе выполнения программы.
InstanceSize: Longint – возвращает количество байт, необходимых для хранения в памяти одного объекта соответствующего класса. Заметим, что значение, возвращаемое этим методом и значение, возвращаемое функцией SizeOf при передаче ей в качестве аргумента объектной переменной – это разные значения. Функция SizeOf всегда возвращает значение 4 (SizeOf(Pointer)), поскольку объектная переменная – это ни что иное как ссылка на данные объекта в памяти. Значение InstanceSize – это размер этих данных, а не размер объектной переменной.
InheritsFrom(AClass: TClass): Boolean – проверяет, является ли класс AClass базовым классом.
MethodAddress(const Name: ShortString): Pointer – возвращает адрес published-метода, имя которого задается параметром Name.
MethodName(Address: Pointer): ShortString – возвращает имя published-метода по заданному адресу.
FieldAddress(const Name: ShortString): Pointer – возвращает адрес published-поля, имя которого задается параметром Name.
GetInterface(const IID: TGUID; out Obj): Boolean – возвращает ссылку на интерфейс через параметр Obj; идентификатор интерфейса задается параметром IID.
GetInterfaceEntry(const IID: TGUID): PInterfaceEntry – возвращает информацию об интерфейсе, который реализуется классом. Идентификатор интерфейса задается параметром IID.
GetInterfaceTable: PInterfaceTable – возвращает указатель на таблицу с информацией обо всех интерфейсах, реализуемых классом.
AfterConstruction – автоматически вызывается после создания объекта. Метод не предназначен для явного вызова из программы. Используется для того, чтобы выполнить определенные действия уже после создания объекта (для этого его необходимо переопределить в производных классах).
BeforeDestruction – автоматически вызывается перед уничтожением объекта. Метод не предназначен для явного вызова из программы. Используется для того, чтобы выполнить определенные действия непосредственно перед уничтожением объекта (для этого его необходимо переопределить в производных классах).
Dispatch(var Message) – служит для вызова методов, объявленных с ключевым словом message.
DefaultHandler(var Message) – вызывается методом Dispatch в том случае, если метод, соответствующий сообщению Message, не был найден.
NewInstance: TObject – вызывается при создании объекта для выделения динамической памяти, чтобы разместить в ней данные объекта. Метод вызывается автоматически, поэтому нет необходимости вызывать его явно.
FreeInstance – вызывается при уничтожении объекта для освобождения занятой объектомдинамической памяти. Метод вызывается автоматически, поэтому нет необходимости вызывать его явно.
Destroy – стандартный деструктор.
Дата добавления: 2015-11-16; просмотров: 71 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Свойства-массивы | | | Перекрытие элементов класса в производных классах |