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 WithEnd With i może odnosić się do elementów członkowskich obiektu, który jest generowany przez ocenę objectExpressionelementu .
End With Wymagany. 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 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

Zobacz też