2011-05-26 158 views
20

我在我的應用程序中需要返回一個數組的函數。我已經在幾個地方發現瞭如何通過聲明數組類型來實現這一點,例如如何從Delphi函數返回數組?

type 
    TStringArray = array of string; 

然後宣佈我的功能

function SomeFunction(SomeParam: Integer): TStringArray; 

我的問題是試圖在具有兩個接口和實現形式進行此設置。我如何聲明我的類型並在界面中使用該類型聲明函數聲明?

+5

「串的陣列」通常是在Delphi認爲是「不慣用的」。 TStringList通常是首選。 – 2011-05-27 02:14:03

+1

爲了區分動態數組和靜態數組,我通常使用「DynArray」後綴命名這種類型定義:'TStringDynArray = string of array; TStringArray = array [0 ..(maxInt div sizeof(string)) - 1];但是沒有官方公約。 – 2011-05-27 06:05:13

+2

@Warren P:請注意,新的'FileIO'單元使用的是XE RTL的一部分,廣泛使用'TStringDynArray'。所以我不同意這不是慣用的。特別是如果你想返回數組並且使用枚舉器遍歷它,這是非常方便的(參見例如'TDirectory.GetFiles')。 – jpfollenius 2011-05-27 10:32:25

回答

30
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. 

金色的規則是,單元的接口部分描述了由單元使用的數據類型,和類型,類和駐留在單元的功能(它們的簽名)。這是所有其他單位看到的。實現部分包含類和函數的實現。這對其他單位不可見。其他單位需要關心單位的界面,即本單位和外部單位簽署的「合同」,而不是實施部分中的「實施細節」。

12

如果你的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. 
+0

+1使用通用 – Johan 2011-05-27 12:53:44

+1

'TArray '(和泛型一般)雖然不是沒有一些問題,所以要小心它。 – 2014-05-20 00:49:51