Ant*_*lix 5 delphi record helpers
具有源自相同内部类型的两个子类型的类型声明,我们如何为每个子类型具有不同的记录助手?
例:
type
SingleA = Single;
SingleB = Single;
_SingleA = record helper for SingleA
procedure DoThingsToA;
end;
_SingleB = record helper for SingleB
procedure DoThingsToB;
end;
Run Code Online (Sandbox Code Playgroud)
如果我声明一个类型为SingleA的var,我总是从类型SingleB获得帮助,我知道如果我们覆盖相同的内部类型这是正常的行为,但为什么它会发生在不同的类型?
任何帮助非常感谢...
提前致谢.
您没有在此声明子类型.这段代码:
type
SingleA = Single;
SingleB = Single;
Run Code Online (Sandbox Code Playgroud)
仅仅是声明别名,而不是类型.因此,SingleA和SingleB实际上是同一类型Single.
这在这里解释:
当使用另一个类型标识符声明一个类型标识符时,它们没有限定条件,它们表示相同的类型.因此,鉴于声明:
Run Code Online (Sandbox Code Playgroud)type T1 = Integer; T2 = T1; T3 = Integer; T4 = T2;
T1,T2,T3,T4,和Integer所有表示相同的类型.要创建不同的类型,请重复type声明中的单词.例如:Run Code Online (Sandbox Code Playgroud)type TMyInteger = type Integer;创建一个新的类型,称为
TMyInteger是不相同的Integer.
实际上,= type x构造为类型创建了新的类型信息
TypeInfo(SingleA) <> TypeInfo(SingleB).
在原始代码中,您只是为同一类型声明了两个别名Single.
对于任何给定类型(及其别名),您只能在范围内有一个类型帮助器,因此在原始代码中record helper for SingleB隐藏了record helper for SingleA.
通过将别名升级到自己的类型,可以避免此问题:
type
SingleA = type Single;
SingleB = type Single; <<-- the type keyword makes SingleB distinct from SingleA
Run Code Online (Sandbox Code Playgroud)
现在您将拥有两种不同的类型,您的记录助手将按预期工作.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |