web-dev-qa-db-ja.com

Delphi関数から配列を返す方法は?

アプリケーションに、配列を返す必要がある関数があります。私はいくつかの場所で、配列タイプを宣言することによってこれを行う方法を見つけました。

type
  TStringArray = array of string; 

そして、私の関数を宣言します

function SomeFunction(SomeParam: Integer): TStringArray;

私の問題は、インターフェースと実装の両方を備えた形式でこれを設定しようとすることです。インターフェイスで型を宣言し、その型の関数宣言をするにはどうすればよいですか?

25
Joe
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.

ゴールデンルールは、ユニットのinterfaceセクションが、ユニットで使用されるデータ型と、ユニット内に存在する型、クラス、および関数(それらのシグネチャ)を記述することです。これは、すべてのotherユニットが見るものです。 implementationセクションには、クラスと関数の実装が含まれています。これは他のユニットには見えません。他のユニットは、実装セクションにある「実装の詳細」ではなく、ユニットのインターフェース、このユニットと外部ユニットによって署名された「契約」に注意する必要があります。

35

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