Delphi 向泛型TArray类添加非类函数
在Delphi 向泛型TArray类添加非类函数,delphi,delphi-xe7,generic-collections,Delphi,Delphi Xe7,Generic Collections,在System.Generics.Collections中,TArray类型仅具有类函数 例如: class procedure Sort<T>(var Values: array of T); overload; static; 类过程排序(var值:T的数组);超载;静止的 这意味着唯一可接受的语法如下: var Arr : TArray<integer>; begin SetLength(Arr, 2); Arr[0] := 5; Arr[1]
System.Generics.Collections
中,TArray
类型仅具有类函数
例如:
class procedure Sort<T>(var Values: array of T); overload; static;
类过程排序(var值:T的数组);超载;静止的
这意味着唯一可接受的语法如下:
var
Arr : TArray<integer>;
begin
SetLength(Arr, 2);
Arr[0] := 5;
Arr[1] := 3;
TArray.Sort<integer>(Arr);
end;
var
Arr:TArray;
开始
设定长度(Arr,2);
Arr[0]:=5;
Arr[1]:=3;
TArray.Sort(Arr);
结束;
我想定义一个对象的函数,以便使用以下语法对通用数组的值进行排序:
var
Arr : TArray<integer>;
begin
SetLength(Arr, 2);
Arr[0] := 5;
Arr[1] := 3;
Arr.Sort();
end;
var
Arr:TArray;
开始
设定长度(Arr,2);
Arr[0]:=5;
Arr[1]:=3;
Arr.Sort();
结束;
您可以为非通用动态数组或完全专用的通用动态数组定义帮助程序。例如,您可以编写:
type
TMyArray1 = array of Integer;
TMyArray2 = TArray<Integer>;
TMyArrayHelper1 = record helper for TMyArray1
end;
TMyArrayHelper2 = record helper for TMyArray2
end;
TMyArrayHelper3 = record helper for TArray<Integer>
end;
类型
TMyArray1=整数数组;
tMyarray 2=焦油;
TMyArrayHelper1=TMyArray1的记录辅助程序
结束;
TMyArrayHelper2=TMyArray2的记录辅助程序
结束;
TMyArrayHelper3=TArray的记录辅助程序
结束;
这允许您将方法添加到此类数组的作用域中
这样你就可以写作了
type
TIntegerArrayHelper = record helper for TArray<Integer>
procedure Sort;
end;
procedure TIntegerArrayHelper.Sort;
begin
TArray.Sort<Integer>(Self);
end;
类型
TinteGrarrayHelper=TArray的记录辅助对象
程序分类;
结束;
程序tintegerarayhelper.Sort;
开始
TArray.Sort(Self);
结束;
但是,您不能写:
TMyArrayHelper<T> = record helper for TArray<T>
end;
TMyArrayHelper=记录TArray的助手
结束;
编译器根本不支持泛型帮助程序
在我看来,这些都不值得,只要打电话:
TArray.Sort<T>()
TArray.Sort()
直接的。在我看来,添加一个记录帮助器,并且必须为您希望支持的每个元素类型创建一个记录帮助器,这似乎是一种成本,无法证明返回的合理性。您可以为非通用动态数组或完全专用的通用动态数组定义帮助器。例如,您可以编写:
type
TMyArray1 = array of Integer;
TMyArray2 = TArray<Integer>;
TMyArrayHelper1 = record helper for TMyArray1
end;
TMyArrayHelper2 = record helper for TMyArray2
end;
TMyArrayHelper3 = record helper for TArray<Integer>
end;
类型
TMyArray1=整数数组;
tMyarray 2=焦油;
TMyArrayHelper1=TMyArray1的记录辅助程序
结束;
TMyArrayHelper2=TMyArray2的记录辅助程序
结束;
TMyArrayHelper3=TArray的记录辅助程序
结束;
这允许您将方法添加到此类数组的作用域中
这样你就可以写作了
type
TIntegerArrayHelper = record helper for TArray<Integer>
procedure Sort;
end;
procedure TIntegerArrayHelper.Sort;
begin
TArray.Sort<Integer>(Self);
end;
类型
TinteGrarrayHelper=TArray的记录辅助对象
程序分类;
结束;
程序tintegerarayhelper.Sort;
开始
TArray.Sort(Self);
结束;
但是,您不能写:
TMyArrayHelper<T> = record helper for TArray<T>
end;
TMyArrayHelper=记录TArray的助手
结束;
编译器根本不支持泛型帮助程序
在我看来,这些都不值得,只要打电话:
TArray.Sort<T>()
TArray.Sort()
直接的。在我看来,添加一个记录助手,并且必须为您希望支持的每种元素类型创建一个记录助手,这似乎是一种成本,不能证明返回是合理的。单位
System
中的类型TArray
与System.Generics.Collections
中的TArray
类不同。使用记录助手怎么样?更多信息,请参见您自己的details@DelphiCoder:这是一个不同的问题,我想使用泛型arrays@Fabrizio这一点在问题中根本不清楚,是吗TArray.Sort()
不要求传递泛型数组。@DavidHeffernan:同意,这很容易被误解。。。我已经更新了一段时间的公开请求问题:UnitSystem
中的类型TArray
与System.Generics.Collections中的TArray
类不同。使用记录助手怎么样?更多信息,请参见您自己的details@DelphiCoder:这是一个不同的问题,我想使用泛型arrays@Fabrizio这一点在问题中根本不清楚,是吗TArray.Sort()
不要求传递泛型数组。@DavidHeffernan:同意,这很容易被误解。。。我已经更新了一段时间的公开请求问题: