Compatibilité des types et surcharges dans les génériques

De RAD Studio
Aller à : navigation, rechercher

Remonter à Génériques - Index


Surcharges

Les méthodes génériques peuvent participer à la surcharge avec les méthodes non génériques en utilisant la directive 'overload'. Si la sélection de surcharge entre une méthode générique et une méthode non générique est ambiguë, le compilateur sélectionne la méthode non générique.

Par exemple

 type
    TFoo = class
      procedure Proc<T>(A: T); overload;
      procedure Proc(A: String); overload;
      procedure Test;
    end;
  
  procedure TFoo.Test;
  begin
    Proc('Hello'); // calls Proc(A: String);
    Proc<String>('Hello'); // calls Proc<T>(A: T);
  end;

Compatibilité des types

Deux génériques non instanciés sont considérés comme compatibles en affectation seulement s'ils sont identiques ou sont des alias vers un type commun.

Deux génériques instanciés sont considérés comme compatibles en affectation si les types de base sont identiques (ou sont des alias vers un type commun) et si les arguments de type sont identiques.

Remarque : Les génériques de Delphi ne ressemblent pas aux templates de C++ ou aux types génériques de C#. Notamment, un paramètre de type ne peut pas être contraint à un type simple spécifique, tel que Integer, Double, String, et ainsi de suite. Dans les cas où différents types doivent être exprimés (notamment les types simples), considérez l'utilisation de fonctions surchargées pour chaque type nécessaire ou l'utilisation d'un type enregistrement tel que TValue depuis l'unité System.Rtti, qui offre des opérateurs et des méthodes pour le stockage et l'interrogation de ces types de données.

Voir aussi