在类型声明中= do后键入什么

时间:2014-06-12 13:21:37

标签: delphi

在mORMot的SynCommons.pas中,有以下代码片段:

type
  ....
  TTimeLog = type Int64;
             ^^^^

第二个type关键字的目的是什么(在Int64之前)?

1 个答案:

答案 0 :(得分:9)

来自Data Types, Variables, and Constants Index (Delphi)

  

当您声明一个与现有类型相同的类型时,   编译器将新类型标识符视为旧类型的别名。   因此,鉴于声明:

type TValue = Real;
var
  X: Real;
  Y: TValue;
     

X和Y属于同一类型;在运行时,没有办法   区分TValue和Real。这通常没什么影响,   但如果您定义新类型的目的是利用运行时类型   例如,将属性编辑器与之关联的信息   特定类型的属性 - '不同的区别   名称'和'不同类型'变得很重要。在这种情况下,使用   语法:

type newTypeName = type KnownType
     

例如:

type TValue = type Real;
     

强制编译器创建一个名为TValue的新的不同类型。

     

对于var参数,正式和实际的类型必须相同。对于   例如:

type
  TMyType = type Integer;
procedure p(var t:TMyType);
  begin
  end;

procedure x;
var
  m: TMyType;
  i: Integer;
begin
  p(m); // Works
  p(i); // Error! Types of formal and actual must be identical.
end;