In Visual Basic wird das Schlüsselwort Imports verwendet, um Namespaces zu verbinden, um den Zugang zu Klassen und Funktionen zu erleichtern, ohne die gesamte Hierarchie angeben zu müssen. Dies ist besonders wichtig bei der Arbeit an großen Projekten oder bei der Nutzung von Drittanbieterbibliotheken.
In früheren Versionen von VB war die Nutzung externer Klassen erschwert, da es erforderlich war, ständig den vollständigen Pfad zum Typ anzugeben. Mit der Einführung von Namespaces und der Imports-Anweisung erhielten die Entwickler einen praktischen Weg, benötigte Teile der Bibliothek einzubinden und die Arbeit zu beschleunigen.
Wenn in zwei Bibliotheken Typen mit identischen Namen existieren, besteht das Risiko von Mehrdeutigkeiten. Darüber hinaus kann eine übermäßige Anzahl von Imports-Anweisungen zu Konflikten und Namensauflösungsfehlern führen.
Um Verwirrung zu vermeiden, wird empfohlen, Aliase über die Konstruktion Imports alias = Namespace.Type zu verwenden. Bei Namenskonflikten sollte der vollständige Typname im Code eindeutig angegeben werden.
Beispielcode:
Imports System.Text Imports txt = System.Text Module Module1 Sub Main() Dim sb As New StringBuilder() txt.StringBuilder 'Verwendung des Alias End Sub End Module
Wichtige Merkmale:
Kann die Imports-Anweisung innerhalb einer Prozedur oder Klasse platziert werden?
Nein, die Imports-Anweisung ist nur auf Datei- oder Namespace-Ebene zulässig, nicht innerhalb von Prozeduren, Funktionen oder Klassen. Ihre Platzierung innerhalb eines Codeblocks würde einen Kompilierungsfehler verursachen.
Was passiert, wenn identische Typen aus verschiedenen Namespaces ohne Aliase verwendet werden?
Bei einem Zugriff auf einen Typ mit nicht aufgelöstem Namenskonflikt gibt der Compiler den Fehler aus: "Type is ambiguous in the namespace". Man muss entweder den vollständigen Pfad angeben oder Aliase verwenden.
Imports System.Drawing Imports MyProject.Drawing Sub Foo() Dim img As Image ' Mehrdeutigkeitsfehler Dim sysImg As System.Drawing.Image ' Richtig End Sub
Kann man mit Imports ein Namespace aus einer nicht registrierten Assembly einfügen?
Nein, bevor Imports verwendet werden kann, muss die Assembly über "Add Reference" zum Projekt hinzugefügt werden. Andernfalls sieht der Compiler den externen Namespace nicht.
Ein Entwickler fügte gleichzeitig Imports System.Data und Imports System.Web.UI.WebControls ohne Aliase hinzu. Später trat im Code ein Konflikt mit dem Namen DataTable auf, und er verbrachte viel Zeit mit der Fehlersuche.
Vorteile:
Nachteile:
Ein anderer Entwickler verwendet einen Alias-Import: Imports DBTable = System.Data.DataTable, was ihm ermöglicht, Objekte eindeutig zu unterscheiden, selbst wenn in anderen Namespaces ähnliche Namen vorhanden sind.
Vorteile:
Nachteile: