我在我的应用程序中需要返回一个数组的函数。我已经在几个地方发现了如何通过声明数组类型来实现这一点,例如如何从Delphi函数返回数组?
type
TStringArray = array of string;
然后宣布我的功能
function SomeFunction(SomeParam: Integer): TStringArray;
我的问题是试图在具有两个接口和实现形式进行此设置。我如何声明我的类型并在界面中使用该类型声明函数声明?
我在我的应用程序中需要返回一个数组的函数。我已经在几个地方发现了如何通过声明数组类型来实现这一点,例如如何从Delphi函数返回数组?
type
TStringArray = array of string;
然后宣布我的功能
function SomeFunction(SomeParam: Integer): TStringArray;
我的问题是试图在具有两个接口和实现形式进行此设置。我如何声明我的类型并在界面中使用该类型声明函数声明?
unit Unit1;
interface
uses SysUtils;
type
TStringArray = array of string;
function SomeFunction(SomeParam: integer): TStringArray;
...
implementation
function SomeFunction(SomeParam: integer): TStringArray;
begin
SetLength(result, 3);
result[0] := 'Alpha';
result[1] := 'Beta';
result[2] := 'Gamma';
end;
...
end.
金色的规则是,单元的接口部分描述了由单元使用的数据类型,和类型,类和驻留在单元的功能(它们的签名)。这是所有其他单位看到的。实现部分包含类和函数的实现。这对其他单位不可见。其他单位需要关心单位的界面,即本单位和外部单位签署的“合同”,而不是实施部分中的“实施细节”。
如果你的Delphi相当新,你不需要声明一个新类型,声明它为TArray<String>
。
实施例复制并从上面的答案粘贴:
unit Unit1;
interface
function SomeFunction(SomeParam: integer): TArray<String>;
implementation
function SomeFunction(SomeParam: integer): TArray<String>;
begin
SetLength(result, 3);
result[0] := 'Alpha';
result[1] := 'Beta';
result[2] := 'Gamma';
end;
end.
+1使用通用 – Johan 2011-05-27 12:53:44
'TArray
“串的阵列”通常是在Delphi认为是“不惯用的”。 TStringList通常是首选。 – 2011-05-27 02:14:03
为了区分动态数组和静态数组,我通常使用“DynArray”后缀命名这种类型定义:'TStringDynArray = string of array; TStringArray = array [0 ..(maxInt div sizeof(string)) - 1];但是没有官方公约。 – 2011-05-27 06:05:13
@Warren P:请注意,新的'FileIO'单元使用的是XE RTL的一部分,广泛使用'TStringDynArray'。所以我不同意这不是惯用的。特别是如果你想返回数组并且使用枚举器遍历它,这是非常方便的(参见例如'TDirectory.GetFiles')。 – jpfollenius 2011-05-27 10:32:25