Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Директива implements в описании свойства класса позволяет делегировать реализацию интерфейса свойству в реализуемом классе. Например, свойство
property MyInterface: IMyInterface
read FMyInterface
implements IMyInterface;
описывает свойство, реализующее интерфейс ImyInterface. Директива implements должна быть последней в описании свойства и может иметь перечисление после нее имен нескольких интерфейсов, разделенных запятыми. Делегируемое свойство:
· может иметь тип класса или интерфейса.
· не может быть массивом или иметь спецификатор индекса.
· должно иметь спецификатор read; если имеется метод “read”, он не может быть динамическим (хотя может быть виртуальным) или описывать директиву message.
· Если свойство типа интерфейс, соответствующий интерфейс или его интерфейс-прародитель должен присутствовать в списке интерфейсов класса, где продекларировано свойство.
Делегируемое свойство должно возвращать объект, чей класс полностью реализует интерфейс, без использования выражений различия методов (“мэппинга”), см. далее. Например:
type
IMyInterface =
interface
procedure P1;
procedure P2;
end;
TMyClass =
class(TObject, IMyInterface)
FMyInterface: IMyInterface;
property MyInterface: IMyInterface
read FMyInterface
implements IMyInterface;
end;
tatherClass=
class(tany,ImyInterface)
…
end;
var
aMyClass: TMyClass;
aOtherClass:tOtherClass;
aMyInterface: IMyInterface;
begin
aMyClass:= TMyClass.Create;
aMyClass.FMyInterface:=... // объект, чей класс реализует ImyInterface
aMyInterfase:=aMyClass.myInterfase// ссылка на тот же объект
aMyInterface:= MyClass;// допустимо, так как ImyInteface – интерфейс-прародитель для tMyClass; ссылка на объект,агрегирующий
aMyInterface.MyInterface:=totherClass.create;//это второй объект
aMyInterface.P1;
aMyInterfase.MyInterfase.P1;//это вызов методаP1 для второго объекта
end;
Дата публикования: 2014-11-29; Прочитано: 205 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!