我想在XE5中做到这一点:
type TMyRec = record // fields class function GetList: TMyRecArr; static; end; TMyRecArr = array of TMyRec;
我已经看到了“Forward declarations for record types”和“how to do a typed forward declaration?”,但是它们似乎并不相关,因为我的问题没有将记录作为参数传递.
解决方法
您不能使用forward声明来声明记录类型或数组类型.但不要害怕您可以使用通用动态数组TArray< T>.
type TMyRec = record class function GetList: TArray<TMyRec>; static; end;
这实际上比根据您的问题的代码声明TMyRecArr更好.这是因为通用的TArray< T>具有比传统动态数组类型更灵活的类型标识.您可以使用TArray< T>在库中定义的泛型类型是独立的,不知道你的代码.
现在,您可以声明类型如下:
type TMyRec = record type TMyRecArray = array of TMyRec; class function GetList: TMyRecArray; static; end;
然后你的数组类型是TMyRec.TMyRecArray.但我敦促你不要这样做.您将拥有只能与您一起使用代码的类型,不能与第三方代码一起使用.
总之,TArray< T>是你的朋友.