Delphi 如何将变量类型声明为泛型?

Delphi 如何将变量类型声明为泛型?,delphi,Delphi,我正在创建一个双链接列表类,并试图更改创建对象时列表存储的数据类型 TItem = record value: string; address, prev, next: integer; end; TDoubleLinkedList = class private length, head, tail: integer; data: array of TItem; public constructor Create; procedure add(value: strin

我正在创建一个双链接列表类,并试图更改创建对象时列表存储的数据类型

TItem = record
  value: string;
  address, prev, next: integer;
end;

TDoubleLinkedList = class
private
  length, head, tail: integer;
  data: array of TItem;
public
  constructor Create;
  procedure add(value: string);
  function get(address: integer): string;
  property Values[address: integer]: string read get; default;
end;
是否有任何方法可以将TItem.value声明为具有变量类型,而不是创建对象时可以更改的类型?我希望能够(在一个单独的单元中)调用类似于类型数组的东西,并使TItem.value成为该类型

我希望能够(在一个单独的单元中)调用类似于类型数组的东西,并使TItem.value成为该类型

根据您的实际需要,您可以选择:

  • 适用于列表中所有元素都具有相同类型的情况。事实上,在中的标准库中有一些现成的列表实现
  • 当您需要动态行为时,如在JS中,当同一变量可以在代码的不同区域中被视为整数或字符串时,这一点很好
  • 允许您存储具有不同类型的元素,但类型是安全的,即定义后,类型不会更改。两篇好文章:
我希望能够(在一个单独的单元中)调用类似于类型数组的东西,并使TItem.value成为该类型

根据您的实际需要,您可以选择:

  • 适用于列表中所有元素都具有相同类型的情况。事实上,在中的标准库中有一些现成的列表实现
  • 当您需要动态行为时,如在JS中,当同一变量可以在代码的不同区域中被视为整数或字符串时,这一点很好
  • 允许您存储具有不同类型的元素,但类型是安全的,即定义后,类型不会更改。两篇好文章:
有没有办法将TItem.value声明为具有可在创建对象时更改的变量类型

使用泛型创建记录和类,以便
数据[x]的类型。值
绑定到
TDoubleLinkedList的类型
T

type
  TItem<T> = record
    value: T;
    address, prev, next: integer;
  end;

  TDoubleLinkedList<T> = class
  private
    length, head, tail: integer;
    data: array of TItem<T>;
  public
    constructor Create;
    procedure add(value: T);
    function get(address: integer): T;
    property Values[address: integer]: T read get; default;
  end;
类型
滴度=记录
值:T;
地址,上一个,下一个:整数;
终止
t双重链接列表=类
私有的
长度、头、尾:整数;
资料:滴度数组;
平民的
构造函数创建;
程序增加(值:T);
函数get(地址:整数):T;
属性值[地址:整数]:T read get;违约
终止
用法示例:

var
  dll_int: TDoubleLinkedList<integer>;
  dll_string: TDoubleLinkedList<string>;
begin
  dll_int := TDoubleLinkedList<integer>.Create;
  try
    dll_int.add(42);
    writeln(dll_int.get(0)); // returns 42
  finally
    dll_int.Free;
  end;

  dll_string := TDoubleLinkedList<string>.Create;
  try
    dll_string.add('Test');
    writeln(dll_string.get(0)); // returns 'Test'
  finally
    dll_string.Free;
  end;

end.
var
dll_int:t双重链接列表;
dll_字符串:t双重链接列表;
开始
dll_int:=t创建双链接列表;
尝试
dll_int.add(42);
writeln(dll_int.get(0));//返回42
最后
dll_int.Free;
终止
dll_string:=TDoubleLinkedList.Create;
尝试
dll_string.add('Test');
writeln(dll_string.get(0));//返回“测试”
最后
dll_string.Free;
终止
终止
有没有办法将TItem.value声明为具有可在创建对象时更改的变量类型

使用泛型创建记录和类,以便
数据[x]的类型。值
绑定到
TDoubleLinkedList的类型
T

type
  TItem<T> = record
    value: T;
    address, prev, next: integer;
  end;

  TDoubleLinkedList<T> = class
  private
    length, head, tail: integer;
    data: array of TItem<T>;
  public
    constructor Create;
    procedure add(value: T);
    function get(address: integer): T;
    property Values[address: integer]: T read get; default;
  end;
类型
滴度=记录
值:T;
地址,上一个,下一个:整数;
终止
t双重链接列表=类
私有的
长度、头、尾:整数;
资料:滴度数组;
平民的
构造函数创建;
程序增加(值:T);
函数get(地址:整数):T;
属性值[地址:整数]:T read get;违约
终止
用法示例:

var
  dll_int: TDoubleLinkedList<integer>;
  dll_string: TDoubleLinkedList<string>;
begin
  dll_int := TDoubleLinkedList<integer>.Create;
  try
    dll_int.add(42);
    writeln(dll_int.get(0)); // returns 42
  finally
    dll_int.Free;
  end;

  dll_string := TDoubleLinkedList<string>.Create;
  try
    dll_string.add('Test');
    writeln(dll_string.get(0)); // returns 'Test'
  finally
    dll_string.Free;
  end;

end.
var
dll_int:t双重链接列表;
dll_字符串:t双重链接列表;
开始
dll_int:=t创建双链接列表;
尝试
dll_int.add(42);
writeln(dll_int.get(0));//返回42
最后
dll_int.Free;
终止
dll_string:=TDoubleLinkedList.Create;
尝试
dll_string.add('Test');
writeln(dll_string.get(0));//返回“测试”
最后
dll_string.Free;
终止
终止

TItem=记录值:T;地址,上一个,下一个:整数;结束?您使用的是哪个版本的Delphi?不确定此q是否值得获得否决票,因此我希望OP不会推迟。更通用的列表类型:
TItem=record value:T;地址,上一个,下一个:整数;结束?您使用的是哪一版本的Delphi?不确定此q是否值得获得否决票,因此我希望OP不会推迟。更通用的列表类型: