With...End With — Instrukcja (Visual Basic)
Wykonuje szereg 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 członków obiektu lub struktury. W przypadku korzystania ze struktury można odczytywać tylko wartości elementów członkowskich lub metod wywoływania. Jeśli próbujesz przypisać wartości do elementów członkowskich struktury używanej With...End With
w instrukcji, zostanie wyświetlony błąd.
Składnia
With objectExpression
[ statements ]
End With
generatora
Termin | Definicja |
---|---|
objectExpression |
Wymagany. Wyrażenie, które zostaje oszacowane do obiektu. Wyrażenie może być dowolnie złożone i jest sprawdzane tylko raz. Wyrażenie może być dowolnego typu danych, w tym typów podstawowych. |
statements |
Opcjonalny. Co najmniej jedna instrukcja między With End With i może odnosić się do elementów członkowskich obiektu, który jest generowany przez ocenę objectExpression elementu . |
End With |
Wymagany. Kończy definicję With bloku. |
Uwagi
Za pomocą polecenia With...End With
moż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 szacować złożonego wyrażenia wiele razy ani przypisywać wyniku do zmiennej tymczasowej, aby odwołać się do jego członków wiele razy.
Kod staje się bardziej czytelny dzięki eliminacji powtarzających się wyrażeń kwalifikujących.
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
w wyniku wystąpi coś innego niż obiekt, możesz tylko odczytać wartości jego elementów członkowskich lub wywołać metody, a w przypadku próby przypisania wartości do elementów członkowskich struktury używanej w With...End With
instrukcji zostanie wyświetlony błąd. 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 jest taki, że struktura istnieje tylko na stosie wywołań i nie ma żadnego sposobu, aby członek zmodyfikowanej struktury w takich sytuacjach mógł pisać do takich lokalizacji, żeby inny kod w programie mógł obserwować zmiany.
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żesz użyć metod i właściwości innych obiektów, ale musisz je zakwalifikować z ich nazwami 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.
Instrukcje są wykonywane tylko raz, chyba że blok zawiera pętlę. Możesz zagnieździć różne rodzaje struktur sterujących. Aby uzyskać więcej informacji, zobacz Zagnieżdżone struktury kontrolek.
Uwaga
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