声明用于存储和检索属性值的属性名称和属性过程。
语法
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
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
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
组成部分
attributelist可选。 适用于此属性或
Get或Set过程的属性列表。 请参阅特性列表。Default可选。 规定此属性是定义它的类或结构的默认属性。 默认属性必须接受参数,并且可以在不指定属性名称的情况下设置和检索。 如果将属性声明为
Default,则不能在该属性或其任何一个属性过程上使用Private。 有关示例和详细指南,请参阅 如何:在 Visual Basic 中声明和调用默认属性。accessmodifier在
Property语句中为可选,在Get和Set语句中至多出现一次。 可以是以下值之一:propertymodifiers可选。 可以是以下值之一:
MustOverride OverridesNotOverridable Overrides
Shared可选。 请参阅 Shared。
Shadows可选。 请参阅 Shadows。
ReadOnly可选。 请参阅 ReadOnly。
WriteOnly可选。 请参阅 WriteOnly。
Iterator可选。 请参阅 Iterator。
name必需。 属性的名称。 请参阅 Declared Element Names。
parameterlist可选。 表示此属性参数的局部变量名称列表,以及
Set过程的可能附加参数。 参数化属性通常用于创建允许集合式访问的索引器或默认属性。 请参阅 参数列表 和 作方法:在 Visual Basic 中声明和调用默认属性。returntype如果
Option Strict为On,则是必需的。 此属性返回的值的数据类型。Implements可选。 表示该属性实现了一个或多个属性,每个属性都在由该属性的包含类或结构实现的接口中定义。 请参阅 Implements 语句。
implementslist如果提供
Implements,则是必需的。 正在实现的属性的列表。implementedproperty [ , implementedproperty ... ]每个
implementedproperty都具有以下语法和部件:interface.definedname组成部分 说明 interface必需。 此属性的包含类或结构所实现的接口的名称。 definedname必需。 在 interface中用于定义属性的名称。Get可选。 如果属性被标记为
ReadOnly,则为必需。 启动用于返回属性值的Get属性过程。 该Get语句不用于 自动实现的属性。statements可选。 在
Get或Set过程中运行的语句块。End Get终止
Get属性过程。Set可选。 如果属性被标记为
WriteOnly,则为必需。 启动用于存储属性值的Set属性过程。 该Set语句不用于 自动实现的属性。End Set终止
Set属性过程。End Property终止此属性的定义。
注解
Property 语句引入了属性的声明。 一个属性可以有一个 Get 过程(只读)、一个 Set 过程(只写)或两者都有(读写)。 使用自动实现的属性时,可以省略 Get 该过程 Set 。 有关详细信息,请参阅 自动实现的属性。
你只能在类级别使用 Property。 这意味着属性的声明上下文必须是类、结构、模块或接口,不能是源文件、命名空间、过程或块。 有关详细信息,请参阅声明上下文和默认访问级别。
默认情况下,属性使用公共访问。 你可以使用 Property 语句上的访问修饰符来调整属性的访问级别,并且可以选择将其属性过程之一调整为更具限制性的访问级别。 有关混合访问级别的详细示例,请参阅 How to: Declare a Property with Mixed Access Levels.
Visual Basic 在属性赋值期间将参数传递给 Set 过程。 如果不为 Set 提供参数,集成开发环境 (IDE) 将使用名为 value 的隐式参数。 此参数保存要赋予属性的值。 你通常将此值存储在私有局部变量中,并在调用 Get 过程时返回此值。
规则
混合访问级别。 如果要定义读写属性,则可以选择为
Get或Set过程指定不同的访问级别,但不能同时为这两个过程指定。 如果同时为这两个过程指定,则过程访问级别必须比属性的访问级别更严格。 例如,如果属性声明了Friend,则可以声明Set过程Private,但不能声明Public。如果你正在定义一个
ReadOnly或WriteOnly属性,则单个属性过程(分别是Get或Set)表示所有属性。 你不能为此类过程声明不同的访问级别,因为这会为该属性设置两个访问级别。返回类型。
Property语句可以声明它返回的值的数据类型。 你可以指定任何数据类型或枚举、结构、类或接口的名称。如果不指定
returntype,则属性返回Object。实现。 如果此属性使用
Implements关键字,则包含的类或结构必须有一个Implements语句,并且紧跟在Class或Structure语句后面。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
参数化属性
以下示例演示如何创建参数化属性(也称为索引器),该属性允许对集合进行类似数组的访问:
Class SampleCollection
' Define a local collection to store strings.
Private items As New List(Of String)
' Define a parameterized property (indexer) for the collection.
Default Public Property Item(ByVal index As Integer) As String
Get
' Return the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
Return items(index)
Else
Return Nothing
End If
End Get
Set(ByVal value As String)
' Set the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
items(index) = value
ElseIf index = items.Count Then
' Allow adding new items at the end.
items.Add(value)
End If
End Set
End Property
' Add a Count property for convenience.
Public ReadOnly Property Count As Integer
Get
Return items.Count
End Get
End Property
' Add method to add items.
Public Sub Add(ByVal item As String)
items.Add(item)
End Sub
End Class
有关属性用法的综合示例,包括自动实现、混合访问级别和验证方案,请参阅 “属性过程”。