Интерфейсы

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску

Иллюстрация использования интерфейсов. Тип Point реализует интерфейсы IShape и ICloneable. В основной программе переменным типов IShape и ICloneable присваивается объект типа Point, после чего вызываются методы и свойства этих интерфейсов. Последняя строчка иллюстрирует возможность Cross Cast - преобразования типа одного интерфейса к типу другого при условии, что объект реализует оба интерфейса.

type
  IShape = interface
    procedure Draw;
    property X: integer read;
    property Y: integer read;
  end;

  ICloneable = interface
    function Clone: Object;
  end;

  Point = class(IShape,ICloneable)
  private
    xx,yy: integer;
  public
    constructor Create(x,y: integer);
    begin
      xx := x; yy := y;
    end;  
    procedure Draw; begin end;
    property X: integer read xx;
    property Y: integer read yy;
    function Clone: Object;
    begin
      Result := new Point(xx,yy);
    end;
  end;

var 
  p: Point := new Point(2,3);
  ish: IShape := p;     // Использование Point вместо IShape
  icl: ICloneable := p; // Использование Point вместо ICloneable
  
begin
  writeln(ish.X,' ',ish.Y);
  var p1: Point := Point(icl.Clone);
  p := nil;
  writeln(p1.X,' ',p1.Y);
  writeln(ish is Point);
  writeln(ish is ICloneable); // Cross cast!
  (ICloneable(ish)).Clone;
end.

Ссылки