Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Szemantika
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 egy struktúra, a tagokhoz való hozzárendelés képessége attól függ, hogy a struktúrakifejezés hivatkozható-e. Közvetlenül hivatkozható struktúrák tagjaihoz (például változókhoz, tömbelemekhez vagy mezőkhöz) rendelhet hozzá értékeket, de hibaüzenet jelenik meg, ha függvényekből, tulajdonságokból vagy operátorokból visszaadott értékekhez próbál értékeket rendelni, vagy ha zárójelekkel vágja ki a hivatkozási kötelékeket (például With (structureVariable)). 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.
Megjegyzé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
3. példa
Az alábbi példa bemutatja, hogyan With...End With működnek az utasítások a struktúrákkal. Hozzárendelheti a hivatkozható struktúrák tagjaihoz (például tömbelemekhez), de az érték által visszaadott struktúrákhoz vagy zárójelek használata esetén nem.
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