クラス変数とジェネリクス

先ほどのコードにジェネリクスを使ってみる。

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!