ProgrammatieVB.NET bedrijfsapplicatie

Leg uit hoe de With...End With-operator werkt in Visual Basic, wat zijn de voordelen en welke valkuilen zijn er bij het gebruik van geneste With-constructies?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

De With...End With-operator maakt het eenvoudiger om toegang te krijgen tot de eigenschappen en methoden van één object, zodat je de naam van het object niet in elke uitdrukking hoeft te herhalen. Alle verwijzingen binnen het blok verwijzen naar het opgegeven object.

Voorbeeld van gebruik:

With myCustomer .Name = "Ivanov" .Balance += 1000 .LastPurchase = Now End With

Voordelen:

  • De code wordt korter, het aantal typfouten wordt verminderd.
  • Handiger bij het verwerken van geneste structuren, bijvoorbeeld het binden van een formulier aan een object.

Vraag met een addertje onder het gras.

Vraag: Is het mogelijk om één With-blok in een ander te nestelen? Wat gebeurt er met verwijzingen naar eigenschappen en methoden binnen het geneste blok?

Antwoord: Ja, nesting is mogelijk. Maar binnen het interne blok wordt een puntverwijzing (.) geïnterpreteerd met betrekking tot het interne object. Als je dezelfde eigenschapsnaam gebruikt, ontstaat er ambiguïteit.

With obj1 .Value = 10 With obj2 .Value = 20 ' Dit is obj2.Value, niet obj1.Value End With End With

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp.


Verhaal

In het geneste With-gedeelte werden eigenschappen met dezelfde naam in verschillende objecten gebruikt, en de ontwikkelaar verwachtte dat de toewijzing invloed zou hebben op het externe object. Als gevolg hiervan werden de gegevens verkeerd geschreven, het probleem kwam pas aan het licht bij het genereren van een complex rapport, toen de waardes door elkaar waren gehaald.


Verhaal

Bij het refactoren van de code werden de eindblokken End With verwisseld. In een groot codefragment leidde dit ertoe dat expressies naar een andere (al gesloten) instantie van het object begonnen te verwijzen, in plaats van naar de verwachte, wat leidde tot uitvoeringsfouten en moeilijk te traceren bugs.


Verhaal

In businesslogica werd With gebruikt voor geneste collecties. Na het bijwerken van de klassenstructuur werd een nieuwe eigenschap met een naam toegevoegd die overeenkwam met de eigenschappen van het interne object, wat leidde tot een conflict en een compilatiefout, die niet opgemerkt werd door het ontbreken van unit-tests voor deze gevallen.