Интерфейсы: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) (Новая: == Ссылки == *Особенности языка: продвинутый уровень *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalAB...) |
Mikst (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
Иллюстрация использования интерфейсов. Тип Point реализует интерфейсы IShape и ICloneable. В основной программе переменным типов IShape и ICloneable присваивается объект типа Point, после чего вызываются методы и свойства этих интерфейсов. Последняя строчка иллюстрирует возможность Cross Cast - преобразования типа одного интерфейса к типу другого при условии, что объект реализует оба интерфейса. | |||
<source lang="Delphi">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.</source> | |||
== Ссылки == | == Ссылки == | ||
*[[Особенности языка: продвинутый уровень]] | *[[Особенности языка: продвинутый уровень]] | ||
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка] | *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка] |
Текущая версия от 09:18, 16 января 2010
Иллюстрация использования интерфейсов. Тип 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.