VB.NET importeert verklaring versus referenties

Het daadwerkelijke effect van de Imports-verklaring in VB.NET is vaak een bron van verwarring voor mensen die de taal leren. En de interactie met VB.NET References zorgt voor nog meer verwarring. We gaan dat ophelderen in deze snelle tip.

Hier is een korte samenvatting van het hele verhaal. Dan zullen we de details bespreken.

Een verwijzing naar een VB.NET-naamruimte is een vereiste en moet aan een project worden toegevoegd voordat de objecten in de naamruimte kunnen worden gebruikt. (Er wordt automatisch een set referenties toegevoegd voor de verschillende sjablonen in Visual Studio of VB.NET Express. Klik op "Alle bestanden weergeven" in Solution Explorer om te zien wat ze zijn.) Maar de instructie Imports is geen vereiste. In plaats daarvan is het gewoon een coderingsgemak waarmee kortere namen kunnen worden gebruikt.

Laten we nu eens kijken naar een concreet voorbeeld. Om dit idee te illustreren, gaan we de System.Data-naamruimte gebruiken - die ADO.NET-datatechnologie biedt.

System.Data wordt standaard als referentie aan Windows-toepassingen toegevoegd met behulp van de VB.NET Windows Forms-toepassingssjabloon.

Een naamruimte toevoegen aan de verzameling verwijzingen

Als u een nieuwe naamruimte toevoegt aan de verzameling Verwijzingen in een project, zijn de objecten in die naamruimte ook beschikbaar voor het project. Het meest zichtbare effect hiervan is dat de Visual Studio "Intellisense" u zal helpen de objecten in pop-upmenukaders te vinden.

Als u probeert een object in uw programma te gebruiken zonder referentie, genereert de coderegel een foutmelding.

De instructie Imports is daarentegen nooit vereist. Het enige wat het doet is toestaan ​​dat de naam wordt omgezet zonder volledig gekwalificeerd te zijn. Met andere woorden (nadruk toegevoegd om de verschillen te laten zien).

 invoer System.Data

 Formulier openbare klasse 1

    Overleeft System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dim test als OleDb.OleDbCommand

    Einde Sub

 Eindklasse 

en

 invoer System.Data.OleDb

 Formulier openbare klasse 1

    Overleeft System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dim test als OleDbCommand

    Einde Sub

 Eindklasse 

zijn beide equivalent. Maar…

 invoer System.Data

 Formulier openbare klasse 1

    Overleeft System.Windows.Forms.Form

    Private Sub Form1_Load (… 

       Dim test als OleDbCommand

    Einde Sub

 Eindklasse 

resulteert in een syntaxisfout ("Type 'OleDbCommand' is niet gedefinieerd") vanwege het kwalificatiesysteem voor de naamruimte Imports. Gegevens bieden onvoldoende informatie om het object OleDbCommand te vinden.

Hoewel de kwalificatie van namen in uw programmabroncode op elk niveau in de 'schijnbare' hiërarchie kan worden gecoördineerd, moet u nog steeds de juiste naamruimte kiezen om naar te verwijzen. .NET biedt bijvoorbeeld een System.Web-naamruimte en een hele lijst met andere die beginnen met System.Web ...

Notitie

Er zijn twee totaal verschillende DLL-bestanden voor de referenties. Je moet de juiste kiezen, omdat WebService geen methode is in een van hen.