Property 语句
更新:2007 年 11 月
声明属性的名称和用于存储和检索属性值的属性过程。
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
各部分说明
attributelist
可选。应用于此属性 (Property) 或者 Get 或 Set 过程的属性 (Attribute) 列表。请参阅属性列表。Default
可选。指定此属性是定义它的类或结构的默认属性。默认属性必须接受参数,并且不必指定属性名即可设置和检索默认属性。如果将属性声明为 Default,则不能对属性及其属性过程使用 Private。accessmodifier
Property 语句以及 Get 和 Set 语句之一(且只能是这两条语句中的一条)的可选项。可以是如下内容之一:请参见 Visual Basic 中的访问级别。
propertymodifiers
可选。可以是如下内容之一:MustOverride Overrides
NotOverridable Overrides
Shared
可选。请参见 Shared (Visual Basic)。Shadows
可选。请参见 Shadows。ReadOnly
可选。请参见 ReadOnly (Visual Basic)。WriteOnly
可选。请参见 WriteOnly。name
必需。属性的名称。请参见 已声明元素的名称。parameterlist
可选。局部变量名列表,它们表示此属性的参数及 Set 过程可能具有的其他参数。请参见 参数列表。returntype
如果 OptionStrict 为 On,则为必选项。此属性返回值的数据类型。Implements
可选。指出此属性实现一个或多个属性,每个属性均在由此属性的包含类或结构实现的接口中定义。请参见 Implements 语句。implementslist
如果提供了 Implements 则需要。将实现的属性列表。implementedproperty [ , implementedproperty ... ]
每个 implementedproperty 均有下列语法和部分:
interface.definedname
部分
说明
interface
必需。此属性的包含类或结构实现的接口名称。
definedname
必需。在 interface 中定义属性时所用的名称。
Get
必选项,除非属性标记为 WriteOnly。启动用于返回属性值的 Get 属性过程。statements
可选项。在 Get 或 Set 过程中运行的语句块。End Get
终止 Get 属性过程。Set
必选项,除非属性标记为 ReadOnly。启动用于存储属性值的 Set 属性过程。End Set
终止 Set 属性过程。End Property
结束此属性的定义。
备注
Property 语句引入了属性声明。属性可以有 Get 过程(只读)、Set 过程(只写)或同时有两个过程(读写)
仅可以在模块级别使用 Property。这意味着属性的“声明上下文”必须是类、结构、模块或接口,不能是源文件、命名空间、过程或块。 有关更多信息,请参见 声明上下文和默认访问级别。
默认情况下,属性使用公共访问。您可以在 Property 语句上使用访问修饰符调整属性的访问级别,还可以将其中一个属性过程调整到更为严格的访问级别。
在属性赋值期间,Visual Basic 会将参数传递给 Set 过程。如果没有为 Set 提供参数,集成开发环境 (IDE) 将使用名为 value 的隐式参数。此参数容纳要赋给属性的值。该值通常存储在私有局部变量中,每次调用 Get 过程时均返回该值。
规则
**混合访问级别。**如果正在定义读写属性,则可为 Get 或 Set 过程指定与属性访问级别不同的访问级别,但是这两者必须为相同的访问级别。如果这样做,过程访问级别必须比属性访问级别更为严格。例如,如果属性声明为 Friend,则可将 Set 过程声明为 Private,但不能声明为 Public。
如果定义 ReadOnly 或 WriteOnly 属性,则单个属性过程(分别对应 Get 或 Set)表示整个属性。因此不能为此类过程声明不同的访问级别,因为这样做会为属性设置两个访问级别。
**返回类型。**Property 语句可以声明返回值的数据类型。可以指定任何数据类型或枚举、结构、类或接口的名称。
如果不指定 returntype,属性将返回 Object。
**实现。**如果此属性使用 Implements 关键字,包含类或结构的 Class 或 Structure 语句后面必须紧跟着 Implements 语句。Implements 语句必须包含 implementslist 中指定的每个接口。不过,接口定义 Property 时所用的名称(在 definedname 中)不必与此属性的名称(在 name 中)相同。
行为
**从属性过程返回。**当 Get 或 Set 过程返回到调用代码时,继续执行调用它的语句之后的语句。
使用 Exit Property 和 Return 语句可以立即从属性过程中退出。Exit Property 和 Return 语句可以出现在过程中的任何位置,语句数量不限,并且可以混合使用 Exit Property 和 Return 语句。
**返回值。**要从 Get 过程返回某个值,可以将该值赋给属性名,或者将其包含在 Return 语句中。下面的示例将该返回值赋给属性名 quoteForTheDay,然后使用 Exit Property 语句返回。
Private quoteValue As String = "No quote assigned yet."
ReadOnly Property quoteForTheDay() As String Get quoteForTheDay = quoteValue Exit Property End Get End Property
如果使用 Exit Property 但未给 name 赋值,则 Get 过程将返回属性数据类型的默认值。
Return 语句为 Get 过程的返回值赋值,同时退出该过程。下面的示例显示如何执行此项操作。
Private quoteValue As String = "No quote assigned yet."
ReadOnly Property quoteForTheDay() As String Get Return quoteValue End Get End Property
示例
下面的示例声明类中的一个属性。
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
propertyValue = value
End Set
End Property
End Class