Использование оператора as



Использование оператора 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>.
Назад
Содержание
Вперед


Содержание раздела