7.1 Определение

На верх  Назад  Вперёд

Начиная с версии 1.1, FPC поддерживает интерфейсы. Интерфейсы являются альтернативой множественного наследования (где класс может иметь несколько родительских классов), как реализовано, например, в C++. Интерфейс в основном это именованный набор методов и свойств: класс, который реализует интерфейс предоставляет все методы, как они перечислены в определении интерфейса. Класс должен реализовать все методы интерфейса: все или ничего.

Из интерфейсов так же, как из классов также можно строить иерархии: интерфейс-потомок наследует (от предка(ов) другого интерфейса) все методы родительского интерфейса, а также явно указанные в его определении методы. Класс, реализующий интерфейс, должен тоже реализовать все элементы интерфейса, а также методы родительского интерфейса(ов).

Интерфейс может быть однозначно определён GUID. GUID (аббревиатура Globally Unique Identifier - глобально уникальный идентификатор) это 128-битное целое число гарантированно уникальное (конечно теоритически). В системе Windows, GUID интерфейса может и должен использоваться при использовании COM.

Определение интерфейса имеет следующий вид:


Интерфейсный тип

701


Наряду с этим определением необходимо отметить следующее:

Интерфейсы могут быть использованы только в режимах DELPHI или OBJFPC.

Спецификаторы не видны. Все они являются public (на самом деле, не имеет смысла делать их private или protected).

Свойства объявленные в интерфейсе могут иметь только методы для чтения и записи.

В интерфейсах нет конструкторов и деструкторов. Экземпляры интерфейсов не могут быть созданы сами по себе: вместо этого нужно создать экземпляр класса, реализующего интерфейс.

В объявлении метода можно использовать только допустимые модификаторы. В определении интерфейса не могут присутствовать модификаторы virtual, abstract или dynamic, а следовательно и override.

Ниже приводятся примеры интерфейсов:

IUnknown = interface ['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const iid : tguid;out obj) : longint;
function _AddRef : longint;
function _Release : longint;
end;
IInterface = IUnknown;
 
IMyInterface = Interface
Function MyFunc : Integer;
Function MySecondFunc : Integer;
end;

GUID, идентифицирующий интерфейс не является обязательным.