Klassenvariablen in Generics

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Generics - Index

Die in einem generischen Typ definierte Klassenvariable wird in jedem instantiierten Typ instantiiert, der von Typparametern identifiziert wird.

Der folgende Quelltext zeigt, dass TFoo<Integer>.FCount und TFoo<String>.FCount nur einmal instantiiert werden, und dass es sich hierbei um zwei verschiedene Variablen handelt.

 {$APPTYPE CONSOLE}
 type
   TFoo<T> = class
     class var FCount: Integer;
     constructor Create;
   end;
   constructor TFoo<T>.Create;
 begin
   inherited Create;
   Inc(FCount);
 end;
 
 procedure Test;
var
   FI: TFoo<Integer>;
 begin
   FI := TFoo<Integer>.Create;
   FI.Free;
 end;
 
 var
   FI: TFoo<Integer>;
   FS: TFoo<String>;
 
 begin
   FI := TFoo<Integer>.Create;
   FI.Free;
   FS := TFoo<String>.Create;
   FS.Free;
   Test;
   Writeln(TFoo<Integer>.FCount); // Ausgabe 2
   Writeln(TFoo<String>.FCount);  // Ausgabe 1
 end.

Siehe auch