Property 过程 (Visual Basic)
属性过程是操作模块、类或结构上的自定义属性的一系列 Visual Basic 语句。 Property 过程也称为“属性访问器”。
Visual Basic 提供了以下属性过程:
Get 过程返回属性值。 在表达式中访问属性时将调用此过程。
Set 过程将属性设置为某个值,包括对象引用。 将一个值赋给属性时,它将被调用。
通常 Property 过程使用 Get 和 Set 语句成对定义,但是如果该属性为只读 (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 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
modifiers 可以指定访问级别、与重载、重写、共享、隐藏操作相关的信息,以及属性是只读还是只写。 Get 或 Set 过程上的 access level 可以是比为属性本身指定的访问级别限制更高的任何级别。 有关更多信息,请参见 Property 语句。
数据类型
属性的数据类型和主要访问级别在 Property 语句中定义,而不是在 Property 过程中定义。 属性只能有一种数据类型。 例如,不能定义属性存储 Decimal 值而检索 Double 值。
访问级别
但是,可以为属性定义主要访问级别,以及在一个 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)
声明与调用阐释
下面的属性将一个全名存储为两个组成全名的名称(名字和姓氏)。 当调用代码读取 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 Property 过程的典型调用。
fullName = "MyFirstName MyLastName"
MsgBox(fullName)
请参见
任务
如何:调用 Property 过程 (Visual Basic)