A... Befejezés utasítással (Visual Basic)

Olyan utasítások sorozatát hajtja végre, amelyek ismétlődően egyetlen objektumra vagy struktúrára hivatkoznak, így az utasítások egyszerűsített szintaxist használhatnak az objektum vagy struktúra tagjaihoz való hozzáféréskor. Struktúra használata esetén csak a tagok értékeit olvashatja el, vagy metódusokat hívhat meg, és hibaüzenet jelenik meg, ha egy utasításban With...End With használt struktúra tagjaihoz próbál értékeket rendelni.

Syntax

With objectExpression
    [ statements ]
End With

Részek

Időszak Definíció
objectExpression Szükséges. Egy objektumnak kiértékelt kifejezés. A kifejezés tetszőlegesen összetett lehet, és csak egyszer lesz kiértékelve. A kifejezés bármilyen adattípusra kiértékelhető, beleértve az elemi típusokat is.
statements Opcionális. Egy vagy több olyan állítás között WithEnd With , amely hivatkozhat egy objektum tagjaira, amelyeket a kiértékelés objectExpressionsorán állítottak elő.
End With Szükséges. Leállítja a blokk definícióját With .

Megjegyzések

A használatával With...End Withutasítássorozatokat hajthat végre egy adott objektumon anélkül, hogy többször meg kéne adnia az objektum nevét. With Az utasításblokkon belül megadhatja az objektum egy tagját egy ponttal kezdődően, mintha az With utasításobjektum előzte volna meg.

Ha például több tulajdonságot szeretne módosítani egy objektumon, helyezze a tulajdonság-hozzárendelési utasításokat a With...End With blokkba, és csak egyszer hivatkozzon az objektumra az egyes tulajdonság-hozzárendelések esetében.

Ha a kód több utasításban is hozzáfér ugyanahhoz az objektumhoz, az alábbi előnyöket élvezheti az With utasítás használatával:

  • Nem kell többször kiértékelnie egy összetett kifejezést, és nem kell hozzárendelnie az eredményt egy ideiglenes változóhoz, hogy többször hivatkozzon a tagokra.

  • A kód olvashatóbbá tétele az ismétlődő minősítő kifejezések eltávolításával.

Az adattípus objectExpression lehet bármilyen osztály- vagy struktúratípus, vagy akár egy Visual Basic elemi típus, például Integer. Ha objectExpression nem objektumot eredményez, akkor csak a tagok értékeit olvashatja, vagy metódusokat hívhat meg, és hibaüzenet jelenik meg, ha egy utasításban With...End With használt struktúra tagjaihoz próbál értékeket rendelni. Ez ugyanaz a hiba, amely akkor jelenik meg, ha olyan metódust hív meg, amely visszaadott egy struktúrát, és azonnal hozzáfért, és hozzárendelt egy értéket a függvény eredményének egy tagjához, például GetAPoint().x = 1. A probléma mindkét esetben az, hogy a struktúra csak a hívásveremen létezik, és ezekben a helyzetekben a módosított struktúratagok nem írhatnak olyan helyre, hogy a program bármely más kódja megfigyelhesse a változást.

A objectExpression kiértékelés egyszer történik, a blokkba való belépéskor. A blokkon belülről nem lehet újra hozzárendelni objectExpression a With elemet.

Egy With blokkon belül csak a megadott objektum metódusaihoz és tulajdonságaihoz férhet hozzá anélkül, hogy azokat minősíteni szeretné. Más objektumok metódusait és tulajdonságait is használhatja, de ezeket az objektumnevekkel kell minősítenie.

Egy utasítást elhelyezhet With...End With egy másikban. A beágyazott With...End With utasítások zavaróak lehetnek, ha a hivatkozott objektumok nem egyértelműek a környezetből. Meg kell adnia egy teljes körű hivatkozást egy külső With blokkban lévő objektumra, amikor az objektumra egy belső With blokkból hivatkozik.

A blokkon kívülről nem ágazhat el utasításblokkba With .

Ha a blokk nem tartalmaz hurkot, az utasítások csak egyszer futnak. Különböző típusú vezérlőstruktúrák ágyazhatók be. További információ: Beágyazott vezérlőstruktúrák.

Feljegyzés

A kulcsszót objektum With inicializálókban is használhatja. További információkért és példákért lásd : Object Initializers: Named and Anonymous Types and Anonymous Types.

Ha csak a With példányosított objektum tulajdonságainak vagy mezőinek inicializálására használ blokkot, fontolja meg inkább az objektum inicializálójának használatát.

1. példa

Az alábbi példában minden With blokk egy utasítássorozatot hajt végre egyetlen objektumon.

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. példa

Az alábbi példa utasításokat ágyaz be With…End With . A beágyazott With utasításban a szintaxis a belső objektumra hivatkozik.

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

Lásd még