Med... Avsluta med -instruktion (Visual Basic)
Kör en serie instruktioner som upprepade gånger refererar till ett enskilt objekt eller en enda struktur så att uttrycken kan använda en förenklad syntax vid åtkomst till medlemmar i objektet eller strukturen. När du använder en struktur kan du bara läsa värdena för medlemmar eller anropa metoder, och du får ett fel om du försöker tilldela värden till medlemmar i en struktur som används i en With...End With
-instruktion.
Syntax
With objectExpression
[ statements ]
End With
Delar
Period | Definition |
---|---|
objectExpression |
Obligatoriska. Ett uttryck som utvärderas till ett objekt. Uttrycket kan vara godtyckligt komplext och utvärderas bara en gång. Uttrycket kan utvärderas till valfri datatyp, inklusive elementära typer. |
statements |
Valfritt. En eller flera instruktioner mellan With och End With som kan referera till medlemmar i ett objekt som skapas av utvärderingen av objectExpression . |
End With |
Obligatoriska. Avslutar definitionen av With blocket. |
Kommentarer
Med hjälp With...End With
av kan du utföra en serie instruktioner på ett angivet objekt utan att ange namnet på objektet flera gånger. I ett With
instruktionsblock kan du ange en medlem i objektet som börjar med en punkt, som om instruktionsobjektet With
föregick det.
Om du till exempel vill ändra flera egenskaper för ett enskilt objekt placerar du egenskapstilldelningsinstruktionerna With...End With
i blocket och refererar bara till objektet en gång i stället för en gång för varje egenskapstilldelning.
Om koden kommer åt samma objekt i flera instruktioner får du följande fördelar med hjälp av -instruktionen With
:
Du behöver inte utvärdera ett komplext uttryck flera gånger eller tilldela resultatet till en tillfällig variabel för att referera till dess medlemmar flera gånger.
Du gör koden mer läsbar genom att eliminera repetitiva kvalificerande uttryck.
Datatypen objectExpression
kan vara vilken klass eller strukturtyp som helst eller till och med en elementär visualiseringstyp, till Integer
exempel . Om objectExpression
resulterar i något annat än ett objekt kan du bara läsa värdena för dess medlemmar eller anropa metoder, och du får ett fel om du försöker tilldela värden till medlemmar i en struktur som används i en With...End With
-instruktion. Det här är samma fel som du skulle få om du anropade en metod som returnerade en struktur och omedelbart fick åtkomst till och tilldelade ett värde till en medlem i funktionens resultat, till exempel GetAPoint().x = 1
. Problemet i båda fallen är att strukturen bara finns på anropsstacken, och det finns inte en chans att en modifierad strukturmedlem i dessa situationer kan skriva till en plats så att någon annan kod i programmet kan observera ändringen.
objectExpression
Utvärderas en gång, vid inträde i blocket. Du kan inte omtilldela objectExpression
inifrån With
blocket.
I ett With
block kan du bara komma åt metoderna och egenskaperna för det angivna objektet utan att kvalificera dem. Du kan använda metoder och egenskaper för andra objekt, men du måste kvalificera dem med deras objektnamn.
Du kan placera en instruktion i en With...End With
annan. Kapslade With...End With
instruktioner kan vara förvirrande om de objekt som refereras till inte är tydliga från kontexten. Du måste ange en fullständigt kvalificerad referens till ett objekt som finns i ett yttre With
block när objektet refereras inifrån ett inre With
block.
Du kan inte förgrena dig till ett With
instruktionsblock utanför blocket.
Om inte blocket innehåller en loop körs uttrycken bara en gång. Du kan kapsla olika typer av kontrollstrukturer. Mer information finns i Kapslade kontrollstrukturer.
Kommentar
Du kan också använda nyckelordet With
i objektinitierare. Mer information och exempel finns i Objektinitierare: Namngivna och anonyma typer och anonyma typer.
Om du bara använder ett With
block för att initiera egenskaperna eller fälten för ett objekt som du just har instansierat kan du överväga att använda en objektinitierare i stället.
Exempel 1
I följande exempel kör varje With
block en serie instruktioner på ett enda objekt.
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
Exempel 2
Följande exempel kapslar With…End With
instruktioner. I den kapslade With
instruktionen refererar syntaxen till det inre objektet.
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