类与结构体详解
发布时间: 2025-08-17 00:31:30 阅读量: 1 订阅数: 6 

### 类与结构体详解
#### 1. 数据封装
变量通常用于存储单个值,这个值可以是像整数或字符串这样的简单类型,也可以是指向更复杂实体的引用。类和结构体就是两种较为复杂的实体类型。
类和结构体都属于容器类型,它们能够将多个相关的数据值组合成一个便于操作的整体。例如,`EmployeeInfo` 结构体可以包含员工的各种信息,如名字、姓氏、员工 ID、办公室号码、分机号等。当你创建一个 `EmployeeInfo` 结构体并填入特定员工的数据后,就可以将这个结构体作为一个整体进行操作,而无需分别传递各个变量。
#### 2. 类的声明与特性
类可以将数据和相关的行为封装在一起。以 `WorkOrder` 类为例,它可以在其属性中存储客户工单的数据,并包含用于处理工单的方法,如安排工作、修改工单要求、设置工单优先级等。
类的声明语法如下:
```vb
[attribute_list] [Partial] [accessibility] [Shadows] [inheritance] _
Class name[(Of type_list)]
[Inherits parent_class]
[Implements interface]
statements
End Class
```
所有类声明必须包含 `Class` 子句(包括类名)和 `End Class` 语句,其他部分都是可选的。例如:
```vb
Class EmptyClass
End Class
```
下面详细介绍类声明中的各个部分:
- **Attribute_list**:可选的 `attribute_list` 是一个用逗号分隔的属性列表,用于为类提供额外信息,帮助编译器和运行时系统更好地理解类的定义。属性通常用于处理特定的编程任务,如需要支持拖放功能来复制类的实例时,需要使用 `Serializable` 属性标记类。部分属性是特定类所特有的,如 `DefaultEvent` 属性可为 Windows 窗体设计器提供组件类的额外信息。由于属性较为专业,如需更多信息,可参考在线帮助中与具体任务相关的部分,也可访问微软的相关网页。
- **Partial**:`Partial` 关键字表示当前声明只是类定义的一部分。例如:
```vb
Partial Public Class Employee
Public FirstName As String
Public LastName As String
...
End Class
... 其他代码,可能与 Employee 类无关 ...
Partial Public Class Employee
Public Email As String
...
End Class
```
程序中可以包含 `Employee` 类的多个部分,这些部分可能位于不同的代码模块中。编译时,Visual Basic 会将这些部分组合起来定义类。虽然类的主要优点之一是将相关代码和数据封装在一起,但分散类的定义可能会导致代码的自包含性降低,容易引起混淆。因此,除非有充分的理由(如允许多个开发者同时处理类的不同部分,或某一部分需要关闭 `Option Strict`),否则应避免拆分类。至少有一个类的部分必须使用 `Partial` 关键字声明,在其他部分中该关键字是可选的,但在所有部分定义中都明确使用该关键字可以强调类是拆分定义的,有助于减少混淆。
- **Accessibility**:类的可访问性子句有以下几种取值:`Public`、`Protected`、`Friend`、`Protected Friend` 或 `Private`。
- `Public`:表示类对类所在模块内外的所有代码都可用,允许最大程度的访问,任何代码都可以创建和操作类的实例。
- `Protected`:只能在声明的类包含在另一个类中时使用。例如:
```vb
Public Class Employee
Public FirstName As String
Public LastName As String
Protected Address As EmployeeAddress
Protected Class EmployeeAddress
Public Street As String
Public City As String
Public State As String
Public Zip As String
End Class
... 其他代码 ...
End Class
```
由于 `EmployeeAddress` 类使用 `Protected` 关键字声明,它仅在包含它的 `Employee` 类及其派生类中可见。
- `Friend`:表示类在同一项目内的类所在模块内外的所有代码都可用。与 `Public` 的区别在于,`Public` 允许项目外的代码访问类,这通常在代码库(.dll 文件)和控件库中会有影响。
- `Protected Friend`:是 `Protected` 和 `Friend` 关键字的组合,声明为 `Protected Friend` 的类仅在包含它的类、派生类以及同一项目内的代码中可访问。
- `Private`:表示类仅在包含它的模块、类或结构体的代码中可访问。如果未指定可访问性级别,默认值为 `Friend`。
- **Shadows**:`Shadows` 关键字表示类隐藏了祖先类中某个其他实体的定义。例如:
```vb
Public Class Employee
Public Class OfficeInfo
Public OfficeNumber As String
Public Extension As String
End Class
Public FirstName As String
Public LastName As String
Public Office As New OfficeInfo
End Class
Public Class Manager
Inherits Employee
Public Shadows Class OfficeInfo
Public OfficeNumber As String
Public Extension As String
Public SecretaryOfficeNumber As String
Public SecretaryExten
```
0
0
相关推荐









