Связывание методов интерфейса с методами класса

Метод интерфейса связывается с методом класса по имени. Если имена по каким-то причинам не совпадают, то можно связать методы явно с помощью специальной конструкции языка Delphi.

Например, в классе TTextReader добавлены методы Next и Finished для поддержки интерфейса IStringIterator. Согласитесь, что существование в одном классе методов Next и NextLine вносит путаницу. По названию метода Next не понятно, что для этого метода является следующим элементом. Поэтому уточним название метода в классе TTextReader и воспользуемся явным связыванием методов, чтобы сохранить имя Next в интерфейсе IStringIterator:

type
  TTextReader = class(TInterfacedObject, ITextReader, IStringIterator)
    ...
    function NextItem: string; 
    function IStringIterator.Next := NextItem; // Явное связывание
  end;

При работе с объектами класса TTextReader через интерфейс IStringIterator вызов метода Next приводит к вызову метода NextItem:

var
  Obj: TTextReader;
  Intf: IStringIterator;
begin
  ...
  Intf := Obj;
  Intf.Next; // -> Obj.NextItem;
  ...
end;

Очевидно, что связываемые методы должны совпадать по сигнатуре (списку параметров и типу возвращаемого значения).

 

Яндекс цитирования