先ほどのコードにジェネリクスを使ってみる。
program test2; {$APPTYPE CONSOLE} type TMyClass<T> = class public procedure Say; class var Value: T; end; var instance_int: TMyClass<Integer>; instance_str: TMyClass<String>; procedure TMyClass<T>.Say; begin // これはWriteLnに渡す型がダメらしい。 //WriteLn(TMyClass<T>.Value); end; begin instance_int := TMyClass<Integer>.Create; instance_str := TMyClass<String>.Create; try TMyClass<Integer>.Value := 123; TMyClass<String>.Value := 'Hello!'; WriteLn(TMyClass<Integer>.Value); WriteLn(TMyClass<String>.Value); //instance_int.Say; //instance_str.Say; finally instance_int.Free; instance_str.Free; end; end.
実行結果
123 Hello!