Set 语句 (Visual Basic)

声明用于为某个属性赋值的 Set 属性过程。

语法

[ <attributelist> ] [ accessmodifier ] Set [([ByVal value [ As datatype ]])]  
    [ statements ]  
End Set  

组成部分

attributelist
可选。 请参阅特性列表

accessmodifier
此属性中最多有一个 GetSet 语句是可选的。 可以是以下值之一:

请参阅 Access levels in Visual Basic

value
可选。 包含属性的新值的参数。 如果未给出(即参数列表不存在或为空),则定义一个名为 value 的隐式参数。 此隐式参数的数据类型是声明此 Set 语句的属性的数据类型。

datatype
如果存在 value 并且 Option StrictOn,则为必需。 如果未给出 value,则不存在。 value 参数的数据类型。 指定的数据类型必须与声明此 Set 语句的属性的数据类型相同。

statements
可选。 调用 Set 属性过程时运行的一个或多个语句。

End Set
必需。 终止 Set 属性过程的定义。

注解

每个属性都必须有一个 Set 属性过程,除非该属性被标记为 ReadOnlySet 过程用于设置属性的值。

当赋值语句提供要存储在属性中的值时,Visual Basic 会自动调用属性的 Set 过程。

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

属性声明的正文只能包含 Property 语句End Property 语句之间的属性的 GetSet 过程。 除了这些过程之外,不能存储任何其他内容。 特别是,它不能存储属性的当前值。 必须将此值存储在属性之外,因为如果你将其存储在任一属性过程中,另一个属性过程将无法访问它。 通常的方法是将值存储在与属性相同级别声明的私有变量中。 你必须在它适用的属性内定义一个 Set 过程。

除非你在 Set 语句中使用 accessmodifier,否则 Set 过程默认为其包含属性的访问级别。

规则

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

    如果你正在定义一个 WriteOnly 属性,则 Set 过程表示整个属性。 你不能为 Set 声明不同的访问级别,因为这会为该属性设置两个访问级别。

行为

  • 从 Property 过程中返回。Set 过程返回到调用代码时,将在提供要存储的值的语句之后继续执行。

    Set 属性过程可使用 Return 语句Exit 语句返回。

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

示例

下面的示例使用 Set 语句设置属性的值。

Class propClass
    Private propVal As Integer
    Property Prop1() As Integer
        Get
            Return propVal
        End Get
        Set(ByVal value As Integer)
            propVal = value
        End Set
    End Property
End Class

另请参阅