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

    可选。 请参阅阴影

  • 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 过程(只写)或两者都有(读写)。 使用自动实现的属性时,可省略 GetSet 过程。 有关详细信息,请参阅自动实现的属性

你只能在类级别使用 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

另请参阅