With...End With 语句 (Visual Basic)

执行重复引用单个对象或结构的一系列语句。

With object
    [ statements ]
End With

部件

术语

定义

expression

必需。 计算为对象的表达式。 此表达式可随意很复杂且仅一次计算。 该表达式可以计算为任何数据类型,包括基类型。

statements

可选。 在可以引用对象的成员。expression的计算产生的 With 和 End With 之间的一个或多个语句。

End With

必需。 结束 With 块的定义。

备注

使用 With...End With,可以执行有关指定对象中的一系列语句,而无需指定对象多次的名称。 在 With 语句块,可以指定要开始从过程中对象的成员,则,就象 With 语句对象之前。

例如,更改一个对象的多个属性,将在 With...End With 中的属性赋值语句块,一次只引用对象而不是一次每个属性赋值。

使用 With 语句,如果您的代码访问多个语句的同一对象,您可以获得以下优点:

  • 您不需要计算复杂表达式多次或将结果赋给一个临时变量引用其成员多次。

  • 您的代码的可读性通过消除重复限定的表达式。

expression 的数据类型可以是任何选件类或结构类型甚至一个 Visual Basic 等基本类型 Integer。

expression 一次计算,在进入到块中。 您不能重新分配 expression 从 With 的内部块。

在 With 块,可以访问仅指定的对象的方法和属性,而无需限定它们。 可以使用其他对象的方法和属性,但是必须用它们的对象名限定它们。

您可以将在另一个个 With...End With 语句。 嵌套 With...End With 语句可能产生混乱,如果引用的对象从上下文不是灰显。 必须提供完全限定对外部 With 块的对象对象时引用从内部 With 的内部块。

不能分支到 With 语句从块外部块。

除非块包含一个循环,语句仅运行一次。 可以嵌套不同类型的控制结构。 有关更多信息,请参见嵌套的控件结构 (Visual Basic)

备注

在对象初始值设定项还可以使用 With 关键字。有关更多信息和示例,请参见对象初始值设定项:命名类型和匿名类型 (Visual Basic)匿名类型 (Visual Basic)

如果使用 With 块只初始化属性或在实例化对象的字段,请考虑使用对象初始值设定项。

示例

在下面的示例中,每 With 阻止执行某个对象的一系列语句。

Private Sub AddCustomer()
    Dim theCustomer As New Customer

    With theCustomer
        .Name = "Coho Vineyard"
        .URL = "http://www.cohovineyard.com/"
        .City = "Redmond"
    End With

    With theCustomer.Comments
        .Add("First comment.")
        .Add("Second comment.")
    End With
End Sub

Public Class Customer
    Public Property Name As String
    Public Property City As String
    Public Property URL As String

    Public Property Comments As New List(Of String)
End Class

下面的示例嵌套 With…End With 语句。 在嵌套 With 语句中,语法引用内部对象。

Dim theWindow As New EntryWindow

With theWindow
    With .InfoLabel
        .Content = "This is a message."
        .Foreground = Brushes.DarkSeaGreen
        .Background = Brushes.LightYellow
    End With

    .Title = "The Form Title"
    .Show()
End With

请参见

参考

List<T>

概念

嵌套的控件结构 (Visual Basic)

对象初始值设定项:命名类型和匿名类型 (Visual Basic)

匿名类型 (Visual Basic)