声明结构的名称,并引入结构包含的变量、属性、事件和过程的定义。
语法
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
部件
术语 | 定义 |
---|---|
attributelist |
可选。 请参阅 属性列表。 |
accessmodifier |
可选。 可以是以下值之一: - 公共 - 保护 - 朋友 - 私人 - 受保护的好友 - 专用保护 请参阅 Visual Basic 中的 Access 级别。 |
Shadows |
可选。 查看 阴影。 |
Partial |
可选。 指示结构的部分定义。 请参阅 部分。 |
name |
必填。 此结构的名称。 请参阅 声明的元素名称。 |
Of |
可选。 指定这是一个泛型结构。 |
typelist |
如果使用 Of 关键字,则为必需。 此结构的类型参数列表。 请参阅 类型列表。 |
Implements |
可选。 指示此结构实现一个或多个接口的成员。 请参阅 Implements 语句。 |
interfacenames |
如果使用语句, Implements 则为必需。 此结构实现的接口的名称。 |
datamemberdeclarations |
必填。 零个或多个Const 、Dim 或Enum Event 声明结构数据成员的语句。 |
methodmemberdeclarations |
可选。 作为结构的方法成员的Function 零个或多个声明、Operator Property 或Sub 过程。 |
End Structure |
必填。 终止 Structure 定义。 |
注解
该 Structure
语句定义可以自定义的复合值类型。
结构是以前版本的 Visual Basic 的用户定义类型(UDT)的通用化。 有关详细信息,请参阅 结构。
结构支持与类相同的许多功能。 例如,结构可以具有属性和过程,它们可以实现接口,并且可以具有参数化构造函数。 但是,在继承、声明和用法等领域的结构和类之间存在显著差异。 此外,类是引用类型,结构是值类型。 有关详细信息,请参阅 结构和类。
只能在命名空间或模块级别使用 Structure
。 这意味着结构的 声明上下文 必须是源文件、命名空间、类、结构、模块或接口,不能是过程或块。 有关详细信息,请参阅 声明上下文和默认访问级别。
结构默认为 好友 访问。 可以使用访问修饰符调整其访问级别。 有关详细信息,请参阅 Visual Basic 中的 Access 级别。
规则
嵌 套。 可以在另一个结构中定义一个结构。 外部结构称为 包含结构,内部结构称为 嵌套结构。 但是,无法通过包含结构访问嵌套结构的成员。 相反,必须声明嵌套结构的数据类型的变量。
成员声明。 必须声明结构的每个成员。 结构成员不能受到 保护 ,也不能
Protected Friend
因为无法从结构继承任何内容。 但是,结构本身可以是Protected
或Protected Friend
。可以在结构中声明零个或多个非共享变量或非共享的非自定义事件。 你不能只有常量、属性和过程,即使其中一些是非共享的。
初始化。 不能初始化结构的任何非共享数据成员的值作为其声明的一部分。 必须通过结构上的参数化构造函数来初始化此类数据成员,或者在创建结构实例后向成员赋值。
遗产。 结构不能继承自除所有结构继承的类型以外的 ValueType任何类型。 具体而言,一个结构不能从另一个结构继承。
不能在结构定义中使用 Inherits 语句 ,甚至不能指定 ValueType。
实现。 如果结构使用 Implements 语句,则必须实现由指定
interfacenames
的每个接口定义的每个成员。
行为
访问级别。 在结构中,可以使用其自己的访问级别声明每个成员。 所有结构成员默认为 公共 访问。 请注意,如果结构本身具有更受限的访问级别,则这会自动限制对其成员的访问,即使你使用访问修饰符调整其访问级别。
范围。 结构在其包含命名空间、类、结构或模块的整个范围内。
每个结构成员的范围都是整个结构。
一生。 结构本身没有生存期。 相反,该结构的每个实例都有独立于所有其他实例的生存期。
实例的生存期从 New Operator 子句创建时开始。 当保存它的变量的生存期结束时,它将结束。
不能延长结构实例的生存期。 模块提供静态结构功能的近似值。 有关详细信息,请参阅 Module 语句。
结构成员的生存期取决于它们的声明方式和位置。 有关详细信息,请参阅 类语句中的“生存期”。
资格。 结构外部的代码必须用该结构的名称限定成员的名称。
如果嵌套结构中的代码对编程元素进行非限定引用,则 Visual Basic 首先在嵌套结构中搜索该元素,然后在其包含结构中,依此搜索到最外部的包含元素。 有关详细信息,请参阅 对声明元素的引用。
内存消耗。 与所有复合数据类型一样,无法通过添加结构成员的名义存储分配来安全地计算结构的总内存消耗量。 此外,无法安全地假定内存中的存储顺序与声明顺序相同。 如果需要控制结构的存储布局,可以将属性应用于StructLayoutAttribute
Structure
语句。
示例:
以下示例使用 Structure
语句为员工定义一组相关数据。 它显示数据的使用情况Public
Friend
和Private
成员,以反映数据项的敏感度。 它还显示过程、属性和事件成员。
Public Structure employee
' Public members, accessible from throughout declaration region.
Public firstName As String
Public middleName As String
Public lastName As String
' Friend members, accessible from anywhere within the same assembly.
Friend employeeNumber As Integer
Friend workPhone As Long
' Private members, accessible only from within the structure itself.
Private homePhone As Long
Private level As Integer
Private salary As Double
Private bonus As Double
' Procedure member, which can access structure's private members.
Friend Sub CalculateBonus(ByVal rate As Single)
bonus = salary * CDbl(rate)
End Sub
' Property member to return employee's eligibility.
Friend ReadOnly Property Eligible() As Boolean
Get
Return level >= 25
End Get
End Property
' Event member, raised when business phone number has changed.
Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure
有关如何使用 Structure
s 的详细信息,请参阅 结构变量。