每个人都可以看到私人类型吗?

时间:2015-11-13 09:59:50

标签: delphi types visibility private

在程序开发期间,我意外地注意到在类中声明的所有类型都具有全局可见性。

我一直认为他们的可见性仅限于类,除非使用类型名称引用类型,如TMyClass.TMytype.Value;

我在这里做了一些非常错误的事情,如下面的结构:

unit MyTest;

interface

type TMyTest  = class
    constructor Create;

    strict private
        type TMyType = ( NUL, SLEEP );

end;

implementation

// ...

导致使用此(MyTest)单位的其他单位发生冲突。

如果单位有睡眠(100);调用,它会与TMyTest.TMyType.SLEEP发生冲突并且防止冲突是为什么我首先在​​类和TMyType中封装了SLEEP。

有关解决方法的任何建议吗?

1 个答案:

答案 0 :(得分:15)

这实际上是设计的。您的枚举值具有单位或全局范围。他们不是私人的,因为他们不属于班级。它们的范围在全球范围内。

您可以通过包含scoped enums指令来安排枚举值具有本地范围:

{$SCOPEDENUMS ON}
  

$SCOPEDENUMS指令启用或禁用在Delphi代码中使用作用域枚举。更具体地说,$SCOPEDENUMS仅影响新枚举的定义,并且仅控制将枚举的值符号添加到全局范围。

     

{$SCOPEDENUMS ON}状态中,枚举是作用域的,并且枚举值不会添加到全局范围。要指定作用域枚举的成员,必须包含枚举的类型。