gpt4 book ai didi

delphi - 来自两个不同子类型的相同记录助手继承

转载 作者:行者123 更新时间:2023-12-03 15:08:04 27 4
gpt4 key购买 nike

有一个类型声明,其中两个子类型派生自同一内部类型,我们如何为每个子类型拥有不同的记录助手?

示例:

type
SingleA = Single;
SingleB = Single;

_SingleA = record helper for SingleA
procedure DoThingsToA;
end;

_SingleB = record helper for SingleB
procedure DoThingsToB;
end;

如果我声明 SingleA 类型的 var,我总是从 SingleB 类型获取帮助器,我知道如果我们重写相同的内部类型,这是正常行为,但为什么不同类型会发生这种情况?

非常感谢任何帮助...

提前致谢。

最佳答案

您没有在这里声明子类型。这段代码:

type
SingleA = Single;
SingleB = Single;

仅声明别名,而不是类型。因此,SingleASingleB实际上是同一类型Single .

这里解释一下:

Type Compatibility and Identity (Delphi)

When one type identifier is declared using another type identifier, without qualification, they denote the same type. Thus, given the declarations:

type
T1 = Integer;
T2 = T1;
T3 = Integer;
T4 = T2;

T1, T2, T3, T4, and Integer all denote the same type. To create distinct types, repeat the word type in the declaration. For example:

type TMyInteger = type Integer;

creates a new type called TMyInteger which is not identical to Integer.

实际上,= type x构造为类型创建新的类型信息,以便
TypeInfo(SingleA) <> TypeInfo(SingleB) .

在您的原始代码中,您只是为同一类型声明了两个别名 Single .

对于任何给定类型(及其别名),您可以 only have one type helper in scope ,所以在你的原始代码中 record helper for SingleB隐藏record helper for SingleA .

通过将别名升级为其自己的类型,可以避免此问题:

type
SingleA = type Single;
SingleB = type Single; <<-- the type keyword makes SingleB distinct from SingleA

现在您将拥有两种不同的类型,并且您的记录助手将按预期工作。

关于delphi - 来自两个不同子类型的相同记录助手继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38507376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com