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