В Datasnap.DSReflect
unit
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;
Итак, вопрос в том, что фактически представляет type of
, и как его можно использовать в приложении реальной жизни, помимо того, что он является своего рода псевдонимом для class of
Примечание. type of
не компилируется в Delphi 7, кажется, что он представлен позже, он окончательно присутствует в XE, но у меня нет Delphi 2007-2010, установленного для попробуйте там.
Обновление: Я заполнил отчет об ошибке https://quality.embarcadero.com/browse/RSP-9850