【发布时间】:2016-02-14 21:01:33
【问题描述】:
在程序开发过程中,我无意中注意到类中声明的所有类型都具有全局可见性。
我一直认为它们的可见性仅限于类,除非类型用类类型名称引用,如 TMyClass.TMytype.Value;
我在这里做错了什么吗,如下所示:
unit MyTest;
interface
type TMyTest = class
constructor Create;
strict private
type TMyType = ( NUL, SLEEP );
end;
implementation
// ...
导致使用此 (MyTest) 单元的其他单元发生冲突。
如果单元有睡眠(100);调用,它会与 TMyTest.TMyType.SLEEP 冲突,防止冲突是我首先将 SLEEP 封装在 class 和 TMyType 中的原因。
对解决方法有什么建议吗?
【问题讨论】:
-
这确实令人惊讶,但正如大卫在他的回答中提到的那样:它是有意为枚举值而设计的。仅供参考:枚举值的范围冲突多年来一直是 Delphi 中的一个问题。因此,按照惯例,开发人员通常会为枚举值添加前缀。例如。
TMyType = (mtNUL, mtSLEEP);(值得考虑以确保代码样式一致性。)另一个值得一提的解决方法是更普遍的适用性:在标识符发生冲突的情况下,您可以在所需的单元名称前加上前缀来解决冲突。例如。Windows.Sleep
标签: delphi types visibility private