难以理解枚举

时间:2013-04-07 09:39:36

标签: vb6 enums

如果表单不能有公共常量声明,为什么表单可以有公共枚举块?

此外,如果我在表单的声明部分中有一个公共变量 我可以在整个应用程序中引用它,但我必须使用点符号 例如form1.var1

但是,如果我在表单的声明中放置一个枚举块,我可以引用它 在整个应用程序的其余部分,但只有它没有前缀 用点符号表示。

枚举是否阻止表单上唯一的结构只能是或者只能从外部引用而没有点表示法?

我缺少的逻辑是什么?

2 个答案:

答案 0 :(得分:4)

这里的逻辑是枚举定义类型

您已经了解类型,因为您在任何地方都使用它们。类是一种类型。所以是IntegerLongString以及所有其他内置数据类型。您可以使用Type关键字创建用户用户定义的类型;如,

' Defines a new type User
Type User
    Name As String
    ID As Integer
    PhoneNumber As String
End Type

如果你仔细想想,你会发现这是有道理的。你永远不会直接使用枚举。相反,您将其用作类型。您声明包含该枚举类型值的变量,与声明包含IntegerString类型值的变量的方式相同。

相比之下,常数不是一种类型。它只是一个常规值,与你声明一个常规变量没有区别,只是不能修改常量变量的值。

可以在类的内部或外部定义类型。但是, Variables 必须在类内部或模块内部定义。

答案 1 :(得分:3)

此行为的原因是由于COM6支持VB6。大多数VB类型基于COM类型库可用的类型(包含在所有VB组件中,以及大多数通用的“ActiveX”组件)。公共VB Enum语句等同于类型库中的“Enum”。但是,在类型库中,Enums是顶级对象(其他对象包括Interface,CoClass,Module,Record,Union和Alias)。这意味着VB将它们作为< ProjectName>。< Enum Name>进行访问,并且此约定适用于内部创建的枚举类型。当它说Form1.MyEnum时,VB对象浏览器会产生误导 - 这就是说它被声明的位置。

至于常数 - 不幸的是,这是VB6中的功能漏洞。 COM类型库支持常量作为类型库模块的一部分,但这种能力从未添加到VB6中(可能是因为VB没有类型库模块的概念)。