Overloads und Typkompatibilität in Generics
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.