4

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

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

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

枚举块是表单上唯一只能或必须只能从外部引用而不使用点符号的结构吗?

我失踪的逻辑是什么?

4

2 回答 2

4

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

您已经了解类型,因为您在任何地方都使用它们。类是一种类型。an Integer、 a Long、 aString和所有其他内置数据类型也是如此。Type您可以使用关键字创建用户自定义类型;例如,

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

如果你仔细想想,你会发现这是有道理的。你永远不会直接使用枚举。相反,您将其用作一种类型。您声明包含该枚举类型值的变量,就像您声明一个包含Integeror类型值的变量一样String

相比之下,常量不是类型。它只是一个常规值,与声明常规变量没有什么不同,只是不能修改常量变量的值。

类型可以在类内部或外部的任何地方定义。然而,变量必须要么在类内部定义,要么在模块内部定义。

于 2013-04-07T10:59:44.663 回答
3

这种行为的原因是由于 VB6 是 COM 的基础。大多数 VB 类型都基于 COM 类型库(包含在所有 VB 组件和最常见的“ActiveX”组件中)可用的那些。公共 VB Enum 语句等效于类型库中的“Enum”。但是,在类型库中,枚举是顶级对象(其他对象包括 Interface、CoClass、Module、Record、Union 和 Alias)。这意味着 VB 以 <ProjectName>.<Enum Name> 的形式访问它们,并且此约定适用于内部创建的枚举类型。VB 对象浏览器在显示 Form1.MyEnum 时具有误导性 - 这只是说明它的声明位置。

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

于 2013-04-08T09:20:07.703 回答