在Datasnap.DSReflect单元中有一些奇怪的代码
TDSAdapterClassType = type of TDSAdapterClass; TDSAdapterClass = class(TPersistent) private FAdapteeInstance: TObject; public constructor Create(AdapteeInstance: TObject); virtual; end;
然后就这样使用了
var AdapteeInstance: TObject; FClassRef: TPersistentClass; Result := TDSAdapterClassType(FClassRef).Create(AdapteeInstance);
一见钟情似乎就像另一种声明类参考的方式。但是逻辑意味着在不增加更多功能的情况下引入语言结构的这种变化是没有意义的。根据逻辑,我发现以下声明编译:
type TypeOfInteger = type of Integer; TypeOfByte = type of Byte; TRec = record x: integer; end; TypeOfTRec = type of TRec; TBytes = array of byte; TypeOfTBytes = type of TBytes;
有趣的是,以下声明无法编译。
type TypeOfString = type of String;
所以问题是什么类型的实际代表,如何在现实生活中应用,除了某种类别的别名
注意:在Delphi 7中不编译的类型,它似乎是在后面介绍的,它在XE中是绝对的,但是我没有安装Delphi 2007-2010来尝试它。