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
    可选。可以是如下内容之一:

  • 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

请参见

任务

如何:向类添加字段和属性

概念

默认属性

参考

Get 语句

Set 语句 (Visual Basic)

参数列表