Overloads und Typkompatibilität in Generics

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Generics - Index

Overloads

Generische Methoden können neben nicht-generischen Methoden durch Verwendung der Direktive "overload" am Überladen teilnehmen. Wenn die Überladen-Auswahl zwischen einer generischen und einer nicht-generischen Methode mehrdeutig wäre, wählt der Compiler die nicht-generische Methode aus.

Zum Beispiel:

 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;

Typkompatibilität

Zwei nicht-instantiierte Generics sind nur dann zuweisungskompatibel, wenn sie identisch oder Aliase eines allgemeinen Typs sind.

Zwei instantiierte Generics sind zuweisungskompatibel, wenn die Basistypen identisch sind (oder Aliase eines allgemeinen Typs) und die Typargumente identisch sind.

Hinweis: Generics in Delphi unterscheiden sich von Templates in C++ oder generischen Typen in C#. Insbesondere kann ein Typparameter nicht auf einen speziellen einfachen Typ, wie Integer, Double, String usw., beschränkt werden. Wenn unterschiedliche Typen ausgedrückt werden müssen (einschließlich einfacher Typen), dann sollten Sie die Verwendung von überladenen Funktionen für jeden benötigten Typ erwägen oder einen Record-Typ, wie TValue aus der Unit System.Rtti, verwenden, der Operatoren und Methoden zum Speichern und Abfragen dieser Datentypen bereitstellt.

Siehe auch