Utilisation de l'opérateur as avec des interfaces

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation des interfaces


Les classes implémentant des interfaces peuvent utiliser l'opérateur as pour se lier dynamiquement à l'interface. Dans l'exemple suivant :

procedure PaintObjects(P: TInterfacedObject)
var
  X: IPaint;
begin
  X := P as IPaint;
{ statements }
end;

la variable P de type TInterfacedObject, peut être affectée à la variable X qui est une référence à l'interface IPaint. La liaison dynamique rend cette affectation possible. Pour cette affectation, le compilateur génère du code qui appelle la méthode QueryInterface de l'interface IInterface de P. En effet, le compilateur ne peut déduire du type déclaré de P si l'instance de P supporte IPaint. A l'exécution, soit P se résout en une référence à une interface IPaint, soit une exception est déclenchée. Dans l'un ou l'autre cas, l'affectation de P à X ne génère pas une erreur à la compilation comme ce serait le cas si P avait pour type une classe n'implémentant pas IInterface.

Quand vous utilisez l'opérateur as pour une liaison dynamique avec une interface, vous devez respecter les règles suivantes :

  • Déclaration explicite de IInterface : Même si toutes les interfaces dérivent de IInterface, il ne suffit pas qu'une classe implémente les méthodes de IInterface pour pouvoir utiliser l'opérateur as. Cela reste vrai même si la classe implémente également les interfaces qu'elle déclare explicitement. La classe doit déclarer explicitement IInterface dans sa liste d'interfaces.
  • Utilisation d'un IID : Les interfaces peuvent utiliser un identificateur basé sur un identificateur global unique (GUID). Les GUID utilisés pour identifier des interfaces sont appelés des identificateurs d'interface (IID). Si vous utilisez l'opérateur as avec une interface, celle-ci doit avoir un IID associé. Pour créer un nouveau GUID dans votre code source, vous pouvez utiliser le raccourci Ctrl+Maj+G de l'éditeur de code.

Voir aussi