在程序开发期间,我意外地注意到在类中声明的所有类型都具有全局可见性。
我一直认为他们的可见性仅限于类,除非使用类型名称引用类型,如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。
有关解决方法的任何建议吗?
答案 0 :(得分:15)
这实际上是设计的。您的枚举值具有单位或全局范围。他们不是私人的,因为他们不属于班级。它们的范围在全球范围内。
您可以通过包含scoped enums指令来安排枚举值具有本地范围:
{$SCOPEDENUMS ON}
$SCOPEDENUMS
指令启用或禁用在Delphi代码中使用作用域枚举。更具体地说,$SCOPEDENUMS
仅影响新枚举的定义,并且仅控制将枚举的值符号添加到全局范围。在
{$SCOPEDENUMS ON}
状态中,枚举是作用域的,并且枚举值不会添加到全局范围。要指定作用域枚举的成员,必须包含枚举的类型。