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. Korzystając ze struktury, możesz jedynie odczytać wartości członków lub wywoływać metody, natomiast próba przypisania wartości do członków struktury używanych w instrukcji With...End With zakończy się błędem.

With objectExpression
    [ statements ]
End With

Części

Termin

Definicja

objectExpression

Parametr 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

Parametr opcjonalny.Jedna lub więcej instrukcji między With i End With, które mogą się odwoływać do członków obiektu, który jest tworzony przez oszacowanie objectExpression.

End With

Parametr wymagany.Kończy definicję bloku With.

Uwagi

Za pomocą With...End With możesz wykonać serię instrukcji na określonym obiekcie bez określania nazwy obiektu wiele razy.W ramach bloku instrukcji With można określić członka obiektu, rozpoczynając od kropki, tak jakby obiekt instrukcji With go poprzedzał.

Na przykład, aby zmienić wiele właściwości dla pojedynczego obiektu, umieść instrukcje przypisania właściwości wewnątrz bloku With...End With, odnoszące się do obiektu tylko raz zamiast raz dla każdego przypisania właściwości.

Jeśli kod uzyskuje dostęp do tego samego obiektu w wielu instrukcjach, zyskasz następujące korzyści za pomocą 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.

Typem danych objectExpression może być dowolny typ klasy lub struktury, a nawet typ podstawowy języka Visual Basic, taki jak Integer. Jeśli wynik objectExpression to coś innego niż obiekt, możesz jedynie odczytać wartości jego członków lub wywoływać metody, natomiast próba przypisania wartości do członków struktury używanych w instrukcji With...End With zakończy się błędem. Jest to ten sam błąd, który wystąpi, jeśli wywołano metodę, która zwróciła strukturę i natychmiast uzyskała dostęp do członka wyniku funkcji i przypisała mu wartość, np. 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.

objectExpression jest wykonywane tylko raz, po wejściu do bloku.Nie można ponownie przypisać objectExpression z poziomu bloku With.

W ramach bloku With, masz dostęp do metod i właściwości jedynie określonego obiektu bez ich kwalifikowania.Możesz użyć metod i właściwości innych obiektów, ale musisz je zakwalifikować z ich nazwami obiektów.

Możesz umieścić jedną instrukcję With...End With w innej.Zagnieżdżone instrukcje With...End With mogą wprowadzać niezrozumienie, jeśli obiekty, do których instrukcje się odwołują, nie są jasne z kontekstu.Musisz podać w pełni kwalifikowane odwołanie do obiektu, który znajduje się w zewnętrznym bloku With, gdy odwołanie do obiektu pochodzi z wewnętrznego bloku With.

Nie możesz rozgałęzić do bloku instrukcji With 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 sterujące (Visual Basic).

[!UWAGA]

Możesz użyć słowa kluczowego With również w inicjatorach obiektów.Aby uzyskać więcej informacji i przykładów, zobacz Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic) i Typy anonimowe (Visual Basic).

Jeśli używasz bloku With tylko do zainicjowania właściwości lub pól obiektu, który został właśnie utworzony, rozważ użycie inicjatora.

Przykład

W poniższym przykładzie każdy blok With 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

Poniższy przykład zagnieżdża instrukcje With…End With.W ramach zagnieżdżonej instrukcji With, składnia odnosi 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ż

Informacje

List

Koncepcje

Zagnieżdżone struktury sterujące (Visual Basic)

Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)

Typy anonimowe (Visual Basic)