Использование
оператора as
Объекты, поддерживающие
интерфейсы, могут использовать оператор as
для динамического присоединения
интерфейса. Например,
procedurePaintObjects(P: TInterfacedObject) var
X: IPaint; begin
X := P as IPaint; {операторы} end;
В данном примере переменная
Р
имеет тип TInterfacedObject
. Данная переменная может
быть назначена переменной X
, как ссылка на интерфейс IPaint.
Для данного назначения компилятор генерирует код для вызова метода QueryIntetface
,
относящегося к интерфейсу IUnknown
переменной P
. Такое
назначение возможно, даже если Р
не поддерживает данный интерфейс.
То есть компилятор не выдаст ошибку при таком назначении.
Во время выполнения вышеприведенного
примера либо успешно происходит присваивание
Х:= Р as IPaint;
либо генерируется исключительная
ситуация.
При использовании оператора
as
вы должны выполнять следующие требования:
Iunknown
, т. к. только
в этом случае вы сможете воспользоваться оператором as
;as
для интерфейса, данный интерфейс должен иметь свой
IID. Напомним, что для создания нового IID достаточно, находясь в редакторе
кода, нажать комбинацию клавиш <Ctrl>+ +<Shift>+<G>.