我在 Delphi XE4 中发现了一些奇怪的行为。
如果在一个泛型类中声明枚举类型和这个类型相同的 set
类型就会出问题。
例如:
TTest<T> = class(TObject)
type
TEnumType = (eOne, eTwo, eThree);
TEnumTypes = set of TEnumType;
end;
以上代码无法编译。编译器会出现错误信息“E2001: 需要序数类型”。
像这样的非泛型类,
TTest = class(TObject)
type
TEnumType = (eOne, eTwo, eThree);
TEnumTypes = set of TEnumType;
end;
需要编译。
为了使通用类成功编译,序数类型必须在类外部声明:
TEnumType = (eOne, eTwo, eThree);
TTest<T> = class(TObject)
type
TEnumTypes = set of TEnumType;
end;
- 这种行为是否被认为是一个错误?如果是,它在后续版本中是否已经修复?
- 有人有其他的解决方法吗?我想在类中声明类型,因为它们仅在该类的私有部分中使用。