VB.NET-Imports-Anweisung versus Referenzen

Die tatsächliche Auswirkung der Imports-Anweisung in VB.NET führt häufig zu Verwirrung beim Erlernen der Sprache. Und die Interaktion mit VB.NET References sorgt für noch mehr Verwirrung. Wir werden das in diesem Quick-Tipp klären.

Hier ist eine kurze Zusammenfassung der ganzen Geschichte. Dann gehen wir die Details durch.

Ein Verweis auf einen VB.NET-Namespace ist eine Anforderung und muss einem Projekt hinzugefügt werden, bevor die Objekte im Namespace verwendet werden können. (Für die verschiedenen Vorlagen in Visual Studio oder VB.NET Express wird automatisch eine Reihe von Verweisen hinzugefügt. Klicken Sie im Projektmappen-Explorer auf "Alle Dateien anzeigen", um die zugehörigen Verweise anzuzeigen.) Die Imports-Anweisung ist jedoch nicht erforderlich. Stattdessen handelt es sich lediglich um einen Codierungskomfort, mit dem kürzere Namen verwendet werden können.

Schauen wir uns nun ein aktuelles Beispiel an. Um diese Idee zu veranschaulichen, verwenden wir den System.Data-Namespace, der die ADO.NET-Datentechnologie bereitstellt.

System.Data wird Windows-Anwendungen standardmäßig als Referenz mithilfe der Windows Forms-Anwendungsvorlage VB.NET hinzugefügt.

Hinzufügen eines Namespaces zur Referenzsammlung

Durch Hinzufügen eines neuen Namespaces zur References-Auflistung in einem Projekt werden die Objekte in diesem Namespace auch für das Projekt verfügbar. Der sichtbarste Effekt davon ist, dass Visual Studio "Intellisense" Ihnen hilft, die Objekte in Popup-Menüfeldern zu finden.

Wenn Sie versuchen, ein Objekt in Ihrem Programm ohne Referenz zu verwenden, generiert die Codezeile einen Fehler.

Die Imports-Anweisung ist dagegen niemals erforderlich. Das einzige, was es tut, ist zuzulassen, dass der Name aufgelöst wird, ohne vollständig qualifiziert zu sein. Mit anderen Worten (Hervorhebung hinzugefügt, um die Unterschiede zu zeigen).

 Importe Systemdaten

 Öffentliche Klasse Form1

    Übernimmt System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dimmtest als OleDb.OleDbCommand

    End Sub

 Klasse beenden 

und

 Importe System.Data.OleDb

 Öffentliche Klasse Form1

    Übernimmt System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dimmtest als OleDbCommand

    End Sub

 Klasse beenden 

sind beide gleichwertig. Aber…

 Importe Systemdaten

 Öffentliche Klasse Form1

    Übernimmt System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dimmtest als OleDbCommand

    End Sub

 Klasse beenden 

führt zu einem Syntaxfehler ("Typ 'OleDbCommand' ist nicht definiert") aufgrund der Imports-Namespace-Qualifikation System.Data bietet nicht genügend Informationen, um das Objekt OleDbCommand zu finden.

Obwohl die Qualifizierung von Namen in Ihrem Programmquellcode auf jeder Ebene in der "scheinbaren" Hierarchie koordiniert werden kann, müssen Sie immer noch den richtigen Namensraum auswählen, auf den Sie verweisen möchten. Beispielsweise stellt .NET einen System.Web-Namespace und eine ganze Liste anderer bereit, die mit System.Web beginnen.

Hinweis

Es gibt zwei völlig unterschiedliche DLL-Dateien für die Referenzen. Sie müssen die richtige auswählen, da WebService in keiner von ihnen eine Methode ist.