How to implement Type-safe COM enumerations?在COM方案中如何在Delphi中实现类型安全的枚举?基本上,我想用封装在类?中的一组静态最终对象引用替换枚举的一组原始常量。 。
,并使用定制的枚举类型进行比较:
我当前正在使用旧的Delphi 5,我想在接口上声明一些枚举参数,不允许客户端对象在要求的枚举类型的地方传递整数(或长整型)类型。 本地Delphi枚举已经是类型安全的。 Java枚举是该语言的一项创新,因为在此之前根本没有枚举。但是,也许您是说一个不同的功能-枚举值以其类型名称作为前缀。 即将发布的Delphi 2009,以及用于.NET产品的Delphi的最新版本,都支持一个称为作用域枚举的新指令。看起来像这样:
本机Delphi枚举有什么问题?它们是安全类型。
自Delphi 2005起,您可以在一个类中使用const,但Delphi 5则不能。
我想我知道为什么Borland选择在TLB编辑器中不使用类型安全的枚举。 COM中的枚举可以是不同的值,而Delphi仅因为Delphi 6(我认为)可以做到这一点。
现在您已经为我们提供了有关问题性质的更多线索,即提及COM,我想我理解您的意思。 COM只能封送Delphi在COM服务器和客户端之间知道的类型的子集。您可以在TLB编辑器中定义枚举,但是它们都是TOleEnum类型,基本上是整数类型(LongWord)。您可以将类型设为TOleEnum的变量设为所需的任何整数值,并将不同的枚举类型的值彼此分配。不是真正的安全类型。 我想不出为什么Delphi的COM不能使用类型安全的枚举的原因,但事实并非如此。恐怕对此无能为力。也许即将发布的Delphi 2009版本中的TLB编辑器中的更改可能会改变这一点。 记录:不使用TLB编辑器时,Delphi完全能够与以类型安全枚举为参数的方法建立接口。 |