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