记录类型(或数组)的前向声明

saa*_*stn 12 delphi delphi-xe5

我想在XE5中这样做:

type
  TMyRec = record
    // fields
    class function GetList: TMyRecArr; static;
  end;

  TMyRecArr = array of TMyRec;
Run Code Online (Sandbox Code Playgroud)

我已经看过"记录类型的前向声明""如何进行类型转发声明?" ,但它们似乎无关紧要,因为我的问题是没有将记录作为参数传递.

Dav*_*nan 17

您不能使用前向声明来声明记录类型或数组类型.但不要害怕.您可以使用通用动态数组TArray<T>.

type
  TMyRec = record
    class function GetList: TArray<TMyRec>; static;
  end;
Run Code Online (Sandbox Code Playgroud)

这实际上比TMyRecArr根据您的问题中的代码声明更好.这是因为泛型TArray<T>具有比传统动态数组类型更灵活的类型标识.您可以使用TArray<T>在独立且不知道您的代码的库中定义的泛型类型.

现在,你可以声明这样的类型:

type
  TMyRec = record
    type TMyRecArray = array of TMyRec;
    class function GetList: TMyRecArray; static;
  end;
Run Code Online (Sandbox Code Playgroud)

然后你的数组类型是TMyRec.TMyRecArray.但我劝你不要这样做.您将拥有一个只能与您的代码一起使用的类型,并且不能与第三方代码一起使用.

总之,TArray<T>是你的朋友.