Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполняет ряд инструкций, которые многократно ссылаются на один объект или структуру, чтобы инструкции могли использовать упрощенный синтаксис при доступе к элементам объекта или структуры. При использовании структуры можно считывать только значения элементов или вызывать методы, и при попытке назначить значения членам структуры, используемой в With...End With
инструкции, возникает ошибка.
Синтаксис
With objectExpression
[ statements ]
End With
Комплектующие
Срок | Определение |
---|---|
objectExpression |
Обязательное. Выражение, которое вычисляет объект. Выражение может быть произвольно сложным и вычисляется только один раз. Выражение может оценить любой тип данных, включая начальные типы. |
statements |
Необязательно. Одно или несколько операторов между With ими End With , которые могут ссылаться на элементы объекта, созданного при оценке objectExpression . |
End With |
Обязательное. Завершает определение With блока. |
Замечания
С помощью With...End With
можно выполнять ряд инструкций для указанного объекта, не указывая имя объекта несколько раз. В блоке With
инструкций можно указать элемент объекта, начиная с периода, как если With
бы объект инструкции предшествовал ему.
Например, чтобы изменить несколько свойств в одном объекте With...End With
, поместите инструкции назначения свойств внутри блока, ссылаясь на объект только один раз вместо одного раза для каждого назначения свойств.
Если код обращается к одному объекту в нескольких инструкциях, вы получите следующие преимущества с помощью инструкции With
:
Вам не нужно несколько раз оценивать сложное выражение или назначать результат временной переменной, чтобы ссылаться на его члены несколько раз.
Вы делаете код более читаемым путем устранения повторяющихся выражений.
Тип objectExpression
данных может быть любым типом класса или структуры или даже базовым типом Visual Basic, Integer
например. Если objectExpression
результатом является что-либо, отличное от объекта, можно считывать только значения его членов или вызывать методы, и при попытке назначить значения членам структуры, используемой в With...End With
инструкции. Эта же ошибка возникает, если вы вызвали метод, который вернул структуру и немедленно получил доступ и назначил значение члену результата функции, например GetAPoint().x = 1
. Проблема в обоих случаях заключается в том, что структура существует только в стеке вызовов, и в этих ситуациях измененный член структуры не может записываться в расположение, в которое может наблюдаться любое другое код в программе.
Значение objectExpression
вычисляется один раз при входе в блок. Вы не можете переназначить objectExpression
его из With
блока.
В блоке With
можно получить доступ к методам и свойствам только указанного объекта без их квалификации. Методы и свойства других объектов можно использовать, но их необходимо квалифицировать с именами объектов.
Вы можете поместить одну With...End With
инструкцию в другую.
With...End With
Вложенные операторы могут быть запутаны, если объекты, на которые ссылается ссылка, не понятны из контекста. Необходимо указать полную ссылку на объект, который находится во внешнем With
блоке, когда объект ссылается из внутреннего With
блока.
Невозможно ветвь в блок инструкций With
за пределами блока.
Если блок не содержит цикл, операторы выполняются только один раз. Можно вложить различные типы структур управления. Дополнительные сведения см. в разделе "Вложенные структуры управления".
Замечание
Ключевое With
слово можно также использовать в инициализаторах объектов. Дополнительные сведения и примеры см. в разделе инициализаторы объектов: именованные и анонимные типы и анонимные типы.
Если вы используете With
блок только для инициализации свойств или полей только что созданного объекта, рассмотрите возможность использования инициализатора объектов.
Пример 1
В следующем примере каждый 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
Пример 2
В следующем примере вложены 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