Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wykonuje serię instrukcji, które wielokrotnie odwołują się do pojedynczego obiektu lub struktury, dzięki czemu instrukcje mogą używać uproszczonej składni podczas uzyskiwania dostępu do elementów członkowskich obiektu lub struktury.
Składnia
With objectExpression
[ statements ]
End With
Części
| Termin | Definicja |
|---|---|
objectExpression |
To jest wymagane. Wyrażenie, które oblicza obiekt. Wyrażenie może być dowolnie złożone i jest oceniane tylko raz. Wyrażenie może oceniać dowolny typ danych, w tym typy podstawowe. |
statements |
Opcjonalny. Co najmniej jedna instrukcja między WithEnd With i może odnosić się do elementów członkowskich obiektu, który jest generowany przez ocenę objectExpressionelementu . |
End With |
To jest wymagane. Kończy definicję With bloku. |
Uwagi
Za pomocą polecenia With...End Withmożna wykonać serię instrukcji na określonym obiekcie bez wielokrotnego określania nazwy obiektu.
With W bloku instrukcji można określić element członkowski obiektu rozpoczynający się od kropki, tak jakby With obiekt instrukcji go poprzedzał.
Aby na przykład zmienić wiele właściwości w jednym obiekcie, umieść instrukcje przypisania właściwości wewnątrz With...End With bloku, odwołując się do obiektu tylko raz, a nie raz dla każdego przypisania właściwości.
Jeśli kod uzyskuje dostęp do tego samego obiektu w wielu instrukcjach, uzyskasz następujące korzyści, korzystając z instrukcji With :
Nie musisz wielokrotnie oceniać wyrażenia złożonego ani przypisywać wyniku do zmiennej tymczasowej w celu odwoływania się do jej składowych wiele razy.
Kod staje się bardziej czytelny, eliminując powtarzające się wyrażenia kwalifikujące.
Typ danych może być dowolną objectExpression klasą lub typem struktury, a nawet typem podstawowym języka Visual Basic, takim jak Integer. Jeśli objectExpression jest strukturą, możliwość przypisania do jej elementów członkowskich zależy od tego, czy wyrażenie struktury jest możliwe do przywołowania. Można przypisać do elementów członkowskich struktur, które są bezpośrednio przywoływalne (takie jak zmienne, elementy tablicy lub pola), ale podczas próby przypisania wartości do elementów członkowskich struktur zwracanych przez wartość z funkcji, właściwości lub operatorów lub gdy nawiasy są używane do wycinania powiązań odwołań (na przykład With (structureVariable)). Jest to ten sam błąd, który można uzyskać, jeśli wywołano metodę, która zwróciła strukturę i natychmiast uzyskuje dostęp i przypisał wartość do elementu członkowskiego wyniku funkcji, na przykład GetAPoint().x = 1. Problem w obu przypadkach polega na tym, że struktura istnieje tylko na stosie wywołań i nie ma sposobu, w jaki zmodyfikowany element członkowski struktury w tych sytuacjach może zapisywać w lokalizacji, tak aby każdy inny kod w programie mógł obserwować zmianę.
Element objectExpression jest obliczany raz po wejściu do bloku. Nie można ponownie przypisać elementu objectExpression z bloku With .
With W bloku można uzyskać dostęp do metod i właściwości tylko określonego obiektu bez ich kwalifikacji. Można użyć metod i właściwości innych obiektów, ale należy je zakwalifikować przy użyciu ich nazw obiektów.
Można umieścić jedną With...End With instrukcję w innej. Zagnieżdżone With...End With instrukcje mogą być mylące, jeśli obiekty, do których się odwołujesz, nie są jasne z kontekstu. Należy podać w pełni kwalifikowane odwołanie do obiektu znajdującego się w bloku zewnętrznym With , gdy obiekt jest przywołyny z wewnątrz bloku wewnętrznego With .
Nie można rozgałęzić With bloku instrukcji spoza bloku.
Jeśli blok nie zawiera pętli, instrukcje są uruchamiane tylko raz. Można zagnieżdżać różne rodzaje struktur sterujących. Aby uzyskać więcej informacji, zobacz Zagnieżdżone struktury sterujące.
Uwaga / Notatka
Słowo kluczowe można również użyć With w inicjatorach obiektów. Aby uzyskać więcej informacji i przykładów, zobacz Inicjatory obiektów: typy nazwane i anonimowe i typy anonimowe.
Jeśli używasz With bloku tylko do inicjowania właściwości lub pól obiektu, który właśnie utworzono, rozważ użycie inicjatora obiektu.
Przykład 1
W poniższym przykładzie każdy With blok wykonuje serię instrukcji na pojedynczym obiekcie.
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
Przykład 2
Poniższe przykładowe instrukcje zagnieżdżają With…End With . W zagnieżdżonej With instrukcji składnia odwołuje się do obiektu wewnętrznego.
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
Przykład 3
W poniższym przykładzie pokazano, jak With...End With działają instrukcje ze strukturami. Można przypisać do elementów członkowskich struktur możliwych do odwołania (takich jak elementy tablicy), ale nie do struktur zwracanych przez wartość lub gdy są używane nawiasy.
Private Sub DemonstrateStructureWithStatement()
' Create an array of structures - this is referenceable
Dim points(2) As Point
' Valid: Array elements are referenceable, so assignments work
With points(0)
.X = 10
.Y = 20
End With
' Create a single structure variable - this is also referenceable
Dim singlePoint As Point
With singlePoint
.X = 30
.Y = 40
End With
' Invalid: Using parentheses cuts reference ties
' With (points(0))
' .X = 50 ' This would cause BC30068 error
' .Y = 60
' End With
' Invalid: Function returns by value, not referenceable
' With GetPoint()
' .X = 70 ' This would cause BC30068 error
' .Y = 80
' End With
End Sub
Private Function GetPoint() As Point
Return New Point With {.X = 1, .Y = 2}
End Function
Private Structure Point
Public X As Integer
Public Y As Integer
End Structure