Delen via


Met... Eindigen met instructie (Visual Basic)

Voert een reeks instructies uit die herhaaldelijk verwijzen naar één object of structuur, zodat de instructies een vereenvoudigde syntaxis kunnen gebruiken bij het openen van leden van het object of de structuur. Wanneer u een structuur gebruikt, kunt u alleen de waarden van leden lezen of methoden aanroepen en krijgt u een foutmelding als u waarden probeert toe te wijzen aan leden van een structuur die in een With...End With instructie wordt gebruikt.

Syntaxis

With objectExpression
    [ statements ]
End With

generator

Term Definitie
objectExpression Vereist. Een expressie die resulteert in een object. De expressie kan willekeurig complex zijn en wordt slechts één keer geëvalueerd. De expressie kan elk gegevenstype evalueren, inclusief elementaire typen.
statements Optioneel. Een of meer instructies tussen With en End With die kunnen verwijzen naar leden van een object dat is geproduceerd door de evaluatie van objectExpression.
End With Vereist. Hiermee wordt de definitie van het With blok beëindigd.

Opmerkingen

Met behulp With...End Withvan kunt u een reeks instructies op een opgegeven object uitvoeren zonder de naam van het object meerdere keren op te geven. Binnen een With instructieblok kunt u een lid van het object opgeven dat begint met een punt, alsof het With instructieobject eraan voorafging.

Als u bijvoorbeeld meerdere eigenschappen voor één object wilt wijzigen, plaatst u de eigenschapstoewijzingsinstructies in het With...End With blok, die slechts eenmaal verwijzen naar het object in plaats van één keer voor elke eigenschapstoewijzing.

Als uw code in meerdere instructies toegang heeft tot hetzelfde object, profiteert u van de volgende voordelen met behulp van de With instructie:

  • U hoeft een complexe expressie niet meerdere keren te evalueren of het resultaat toe te wijzen aan een tijdelijke variabele om meerdere keren naar de leden ervan te verwijzen.

  • U kunt uw code beter leesbaar maken door terugkerende in aanmerking komende expressies te elimineren.

Het gegevenstype kan objectExpression elk type klasse of structuur of zelfs een elementair type Visual Basic zijn, zoals Integer. Als objectExpression dit resulteert in iets anders dan een object, kunt u alleen de waarden van de leden lezen of methoden aanroepen en krijgt u een foutmelding als u waarden probeert toe te wijzen aan leden van een structuur die in een With...End With instructie wordt gebruikt. Dit is dezelfde fout als u een methode aanroept die een structuur heeft geretourneerd en onmiddellijk een waarde heeft geopend en toegewezen aan een lid van het resultaat van de functie, zoals GetAPoint().x = 1. Het probleem in beide gevallen is dat de structuur alleen bestaat op de aanroepstack en er is geen manier waarop een gewijzigd structuurlid in deze situaties naar een locatie kan schrijven, zodat elke andere code in het programma de wijziging kan observeren.

De objectExpression waarde wordt eenmaal geëvalueerd na invoer in het blok. U kunt de objectExpressionWith blokkering niet opnieuw toewijzen.

Binnen een With blok hebt u toegang tot de methoden en eigenschappen van alleen het opgegeven object zonder deze te kwalificeren. U kunt methoden en eigenschappen van andere objecten gebruiken, maar u moet ze kwalificeren met hun objectnamen.

U kunt één With...End With instructie binnen een andere plaatsen. Geneste With...End With instructies kunnen verwarrend zijn als de objecten waarnaar wordt verwezen, niet uit de context worden gewist. U moet een volledig gekwalificeerde verwijzing opgeven naar een object dat zich in een buitenste With blok bevindt wanneer naar het object wordt verwezen vanuit een binnenste With blok.

U kunt niet vertakken naar een With instructieblok van buiten het blok.

Tenzij het blok een lus bevat, worden de instructies slechts één keer uitgevoerd. U kunt verschillende soorten besturingsstructuren nesten. Zie Geneste besturingsstructuren voor meer informatie.

Notitie

U kunt het With trefwoord ook gebruiken in object-initializers. Zie Object initializers: Benoemde en anonieme typen en anonieme typen en anonieme typen voor meer informatie en voorbeelden.

Als u alleen een With blok gebruikt om de eigenschappen of velden te initialiseren van een object dat u zojuist hebt geïnstantieerd, kunt u in plaats daarvan een object-initialisatiefunctie gebruiken.

Voorbeeld 1

In het volgende voorbeeld voert elk With blok een reeks instructies uit op één object.

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

Voorbeeld 2

In het volgende voorbeeld worden instructies genest With…End With . Binnen de geneste With instructie verwijst de syntaxis naar het binnenste object.

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

Zie ook