ProgrammierungVB.NET Geschäftsanwendung

Erklären Sie, wie der Operator With...End With in Visual Basic funktioniert, welchen Nutzen er hat und welche Fallstricke bei der Verwendung von verschachtelten With-Konstruktionen bestehen?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Der Operator With...End With ermöglicht es, den Zugriff auf Eigenschaften und Methoden eines einzelnen Objekts zu vereinfachen, sodass der Objektname nicht in jedem Ausdruck wiederholt werden muss. Alle Zugriffe innerhalb des Blocks beziehen sich auf das angegebene Objekt.

Beispiel:

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

Nutzen:

  • Der Code wird kürzer, die Anzahl der Tippfehler verringert sich.
  • Bequemer bei der Verarbeitung von verschachtelten Strukturen, z. B. beim Binden eines Formulars an ein Objekt.

Fangfrage.

Frage: Kann man einen With-Block in einen anderen verschachteln? Was passiert mit den Zugriffen auf Eigenschaften und Methoden im inneren Block?

Antwort: Ja, eine Verschachtelung ist möglich. Aber innerhalb des inneren Blocks wird der Punktzugriff (.) relativ zum inneren Objekt interpretiert. Bei der Verwendung eines gleichen Eigenschaftsnamen kann es zu Mehrdeutigkeiten kommen.

With obj1 .Value = 10 With obj2 .Value = 20 ' Das ist obj2.Value, nicht obj1.Value End With End With

Beispiele realer Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


Geschichte

Im inneren With-Block wurden Eigenschaften mit dem gleichen Namen in verschiedenen Objekten verwendet, und der Entwickler erwartete, dass die Zuweisung den äußeren Objekt beeinflusst. Infolgedessen wurden die Daten nicht dorthin geschrieben, wo sie beabsichtigt waren, das Problem trat erst bei der Erstellung eines komplexen Berichts auf, als die Werte durcheinandergeraten waren.


Geschichte

Bei der Refaktorisierung des Codes wurden die End With-Blöcke verwechselt. In einem großen Codeabschnitt führte dies dazu, dass die Ausdrücke auf eine andere (bereits geschlossene) Objektinstanz verwiesen, anstatt auf die erwartete, was zu Ausführungsfehlern und schwer fassbaren Bugs führte.


Geschichte

In der Geschäftslogik wurde With für verschachtelte Sammlungen verwendet. Nach der Aktualisierung der Klassenstruktur wurde eine neue Eigenschaft mit dem gleichen Namen wie die Eigenschaften des inneren Objekts hinzugefügt, was zu einem Konflikt und einem Kompilierungsfehler führte, der aufgrund fehlender Unit-Tests in solchen Fällen unbemerkt blieb.