Property 过程 (Visual Basic)

属性过程是操作模块、类或结构上的自定义属性的一系列 Visual Basic 语句。Property 过程也称为“属性访问器”。

Visual Basic 提供了以下属性过程:

  • Get 过程返回属性值。在表达式中访问属性时将调用此过程。

  • Set 过程将属性设置为某个值,包括对象引用。将一个值赋给属性时,它将被调用。

通常 Property 过程使用 Get 和 Set 语句成对定义,但是如果该属性为只读 (Get 语句) 或只写 (Set 语句 (Visual Basic)),则可以独立定义过程。

使用自动实现的属性时,可以省略 Get 和 Set 过程。有关更多信息,请参见自动实现的属性 (Visual Basic)

可以定义类、结构和模块中的属性。默认情况下,属性为 Public,这意味着在可以访问该属性的容器的应用程序中,可以从任何位置调用它们。

有关属性和变量的比较,请参见 Visual Basic 中属性和变量的差异

声明语法

属性本身由包含在 Property 语句 和 End Property 语句中的代码块定义。在此块的内部,每个 Property 过程均以内部块的形式出现,它包含在声明语句(Get 或 Set)和匹配的 End 声明中。

声明属性及其过程的语法如下所示:

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
- or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Modifiers 可以指定访问级别、与重载、重写、共享、隐藏操作相关的信息,以及属性是只读还是只写。在 Get 或 Set 程序的 AccessLevel 可以是比指定属性的访问级别限制更高的所有层。有关更多信息,请参见Property 语句

bc3dtbky.collapse_all(zh-cn,VS.110).gif数据类型

属性的数据类型和主要访问级别在 Property 语句中定义,而不是在 Property 过程中定义。属性只能有一种数据类型。例如,不能定义属性存储 Decimal 值而检索 Double 值。

bc3dtbky.collapse_all(zh-cn,VS.110).gif访问级别

但是,可以为属性定义主要访问级别,以及在一个 Property 过程中进一步限制该访问级别。例如,可以定义一个 Public 属性,然后定义一个 Private Set 过程。Get 过程保持为 Public。只能在一个 Property 过程中更改访问级别,并且只能使其比主要访问级别限制更高。有关更多信息,请参见如何:声明具有混合访问级别的属性 (Visual Basic)

参数声明

声明每个参数的方法与声明 Sub 过程 (Visual Basic) 的方法相同,但传递机制必须是 ByVal。

参数列表中每个参数的语法如下所示:

[Optional] ByVal [ParamArray] parametername As datatype

如果参数为可选项,也必须提供默认值作为其声明的一部分。指定默认值的语法如下所示:

Optional ByVal parametername As datatype = defaultvalue

属性值

在 Get 过程中,返回值作为属性值提供给调用表达式。

在 Set 过程中,新的属性值被传递到 Set 语句的参数。如果显式声明一个参数,则必须将其声明为与该属性相同的数据类型。如果不声明参数,编译器将使用隐式参数 Value 来表示赋给属性的新值。

调用语法

通过引用属性,可以隐式调用 Property 过程。除了必须提供所有非可选参数的值,以及必须用括号将参数列表括起来以外,使用属性名的方法与使用变量名一样。如果未提供任何参数,则也可以选择省略括号。

隐式调用 Set 过程的语法如下所示:

propertyname[(argumentlist)] = expression

隐式调用 Get 过程的语法如下所示:

lvalue = propertyname[(argumentlist)]

Do While (propertyname[(argumentlist)] > expression)

bc3dtbky.collapse_all(zh-cn,VS.110).gif声明与调用阐释

下面的属性将一个全名存储为两个组成全名的名称(名字和姓氏)。当调用代码读取 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)

如何:在 Visual Basic 中声明和调用默认属性

如何:在属性中放置值 (Visual Basic)

如何:从属性获取值 (Visual Basic)

概念

Visual Basic 中的过程

Function 过程 (Visual Basic)

运算符过程 (Visual Basic)

过程参数和变量 (Visual Basic)

Visual Basic 中属性和变量的差异