Интерфейсы
Материал из Вики проекта 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.
