在mORMot的SynCommons.pas中,有以下代码片段:
type
....
TTimeLog = type Int64;
^^^^
第二个type
关键字的目的是什么(在Int64
之前)?
答案 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;