属性定义位于 Property 语句和 End Property 语句之间。 在此定义中,可以定义 Get 过程、Set 过程,或者同时定义两者。 属性的所有代码均位于这些过程内。
Get 过程检索属性的值,Set 过程存储一个值。 如果想要属性可读和可写,这两个过程都必须定义。 对于只读属性,只需定义 Get,对于只写属性,只需定义 Set。
创建属性
- 在任何属性或过程之外,使用一条 Property 语句 语句,后跟一条 End Property 语句。 
- 如果属性带有参数,则在 Property 关键字后接该过程的名称,然后是置于括号中的参数列表。 
- 在括号后使用一个 As 子句,以指定属性值的数据类型。 即使对于只写属性也必须指定数据类型。 
- 根据相应的情况,添加 Get 和 Set 过程。 请参见以下说明。 
创建检索属性值的 Get 过程
- 在 Property 和 End Property 语句之间,加入一条 Get 语句 语句,后跟一条 End Get 语句。 无需为 Get 过程定义任何参数。 
- 在 Get 和 End Get 语句之间放置检索属性值的代码语句。 除了生成和返回属性的值之外,该代码还可以包括其他计算和数据操作。 
- 使用 Return 语句可将属性的值返回到调用代码。 
对于读写属性和只读属性,必须编写一个 Get 过程。 对于只写属性,无需定义 Get 过程。
创建写入属性值的 Set 过程
- 在 Property 和 End Property 之间,加入一条 Set 语句 (Visual Basic) 语句,然后加入一条 End Set 语句。 
- 在 Set 语句中,参数列表置于 Set 关键字后面的括号中。 该参数列表至少必须包括一个值参数,该参数的值由调用代码传递。 该值参数的默认名称为 Value,但是如果需要,也可以使用其他名称。 值参数的数据类型必须与属性本身相同。 
- 用于将值存储在属性中的代码语句放在 Set 和 End Set 语句之间。 除了验证和存储属性值之外,该代码还可以包括其他计算和数据操作。 
- 使用值参数接受调用代码提供的值。 可以直接通过赋值语句存储该值,或者在表达式中使用它计算出要存储的内部值。 
对于读写属性和只写属性,必须编写一个 Set 过程。 对于只读属性,无需定义 Set 过程。
示例
下面的示例创建一个读/写属性,将一个全名存储为两个组成部分(名和姓)。 当调用代码读取 fullName 时,Get 过程将姓名的两个组成部分组合在一起,并返回全名。 当调用代码赋予一个新的全名时,Set 过程尝试将其分割为姓名的两个组成部分。 如果它没有找到空格,它将整个名称存储为名。
Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If
    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property
下面的示例演示对 fullName 属性过程的典型调用。 第一个调用设置属性值,第二个调用检索该值。
fullName = "MyFirstName MyLastName"
MsgBox(fullName)
请参见
任务
如何:声明具有混合访问级别的属性 (Visual Basic)
如何:调用 Property 过程 (Visual Basic)