Property Statement

声明用于存储和检索属性值的属性名称和属性过程。

语法

[ <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

    可选。 适用于此属性或 GetSet 过程的属性列表。 请参阅特性列表

  • Default

    可选。 规定此属性是定义它的类或结构的默认属性。 默认属性必须接受参数,并且可以在不指定属性名称的情况下设置和检索。 如果将属性声明为 Default,则不能在该属性或其任何一个属性过程上使用 Private

  • accessmodifier

    Property 语句中为可选,在 GetSet 语句中至多出现一次。 可以是以下值之一:

    请参阅 Access levels in Visual Basic

  • propertymodifiers

    可选。 可以是以下值之一:

  • Shared

    可选。 请参阅 Shared

  • Shadows

    可选。 请参阅 Shadows

  • ReadOnly

    可选。 请参阅 ReadOnly

  • WriteOnly

    可选。 请参阅 WriteOnly

  • Iterator

    可选。 请参阅 Iterator

  • name

    必需。 属性的名称。 请参阅 Declared Element Names

  • parameterlist

    可选。 表示此属性参数的局部变量名称列表,以及 Set 过程的可能附加参数。 请参阅参数列表

  • returntype

    如果 Option StrictOn,则是必需的。 此属性返回的值的数据类型。

  • Implements

    可选。 表示该属性实现了一个或多个属性,每个属性都在由该属性的包含类或结构实现的接口中定义。 请参阅 Implements 语句

  • implementslist

    如果提供 Implements,则是必需的。 正在实现的属性的列表。

    implementedproperty [ , implementedproperty ... ]

    每个 implementedproperty 都具有以下语法和部件:

    interface.definedname

    组成部分 说明
    interface 必需。 此属性的包含类或结构所实现的接口的名称。
    definedname 必需。 在 interface 中用于定义属性的名称。
  • Get

    可选。 如果属性被标记为 ReadOnly,则为必需。 启动用于返回属性值的 Get 属性过程。 该 Get 语句不用于 自动实现的属性

  • statements

    可选。 在 GetSet 过程中运行的语句块。

  • End Get

    终止 Get 属性过程。

  • Set

    可选。 如果属性被标记为 WriteOnly,则为必需。 启动用于存储属性值的 Set 属性过程。 该 Set 语句不用于 自动实现的属性

  • End Set

    终止 Set 属性过程。

  • End Property

    终止此属性的定义。

注解

Property 语句引入了属性的声明。 一个属性可以有一个 Get 过程(只读)、一个 Set 过程(只写)或两者都有(读写)。 使用自动实现的属性时,可以省略 Get 该过程 Set 。 有关详细信息,请参阅 自动实现的属性

你只能在类级别使用 Property。 这意味着属性的声明上下文必须是类、结构、模块或接口,不能是源文件、命名空间、过程或块。 有关详细信息,请参阅声明上下文和默认访问级别

默认情况下,属性使用公共访问。 你可以使用 Property 语句上的访问修饰符来调整属性的访问级别,并且可以选择将其属性过程之一调整为更具限制性的访问级别。

Visual Basic 在属性赋值期间将参数传递给 Set 过程。 如果不为 Set 提供参数,集成开发环境 (IDE) 将使用名为 value 的隐式参数。 此参数保存要赋予属性的值。 你通常将此值存储在私有局部变量中,并在调用 Get 过程时返回此值。

规则

  • 混合访问级别。 如果要定义读写属性,则可以选择为 GetSet 过程指定不同的访问级别,但不能同时为这两个过程指定。 如果同时为这两个过程指定,则过程访问级别必须比属性的访问级别更严格。 例如,如果属性声明了 Friend,则可以声明 Set 过程 Private,但不能声明 Public

    如果你正在定义一个 ReadOnlyWriteOnly 属性,则单个属性过程(分别是 GetSet)表示所有属性。 你不能为此类过程声明不同的访问级别,因为这会为该属性设置两个访问级别。

  • 返回类型。 Property 语句可以声明它返回的值的数据类型。 你可以指定任何数据类型或枚举、结构、类或接口的名称。

    如果不指定 returntype ,则属性返回 Object

  • 实现。 如果此属性使用 Implements 关键字,则包含的类或结构必须有一个 Implements 语句,并且紧跟在 ClassStructure 语句后面。 Implements 语句必须包括在 implementslist 中指定的每个接口。 但是,接口定义 Property(在 definedname 中)的名称不必与该属性的名称(在 name 中)相同。

行为

  • 从属性过程中返回。GetSet 过程返回到调用代码时,将继续执行调用它的语句之后的语句。

    Exit PropertyReturn 语句将导致立即退出属性过程。 任意数量的 Exit PropertyReturn 语句可以出现在过程中的任何位置,并且你可以混合使用 Exit PropertyReturn 语句。

  • 返回值。 要从过程中 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
    

    如果你在没有为 name 赋值的情况下使用 Exit Property,则 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

另请参阅