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中,当同一变量可以在代码的不同区域中被视为整数或字符串时,这一点很好
- 允许您存储具有不同类型的元素,但类型是安全的,即定义后,类型不会更改。两篇好文章:
- 适用于列表中所有元素都具有相同类型的情况。事实上,在中的标准库中有一些现成的列表实现
- 当您需要动态行为时,如在JS中,当同一变量可以在代码的不同区域中被视为整数或字符串时,这一点很好
- 允许您存储具有不同类型的元素,但类型是安全的,即定义后,类型不会更改。两篇好文章:
数据[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不会推迟。更通用的列表类型: