VB.NET importerar uttalande mot referenser

Den faktiska effekten av Imports-uttalandet i VB.NET är ofta en källa till förvirring för personer som lär sig språket. Och interaktionen med VB.NET-referenser ger ännu mer förvirring. Vi kommer att rensa det i detta snabbtips.

Här är en kort sammanfattning av hela historien. Sedan ska vi gå igenom detaljerna.

En referens till ett VB.NET-namnutrymme är ett krav och måste läggas till i ett projekt innan objekten i namnområdet kan användas. (En uppsättning referenser läggs automatiskt till för de olika mallarna i Visual Studio eller VB.NET Express. Klicka på "Visa alla filer" i Solution Explorer för att se vad de är.) Men Imports-uttalandet är inte ett krav. Istället är det helt enkelt en kodningsfunktion som gör att kortare namn kan användas.

Låt oss nu titta på ett faktiskt exempel. För att illustrera denna idé kommer vi att använda namnsområdet System.Data - som tillhandahåller ADO.NET-datateknologi.

System.Data läggs till i Windows-applikationer som en referens som standard med hjälp av VB.NET Windows Forms-applikationsmall.

Lägga till ett namnområde i referenssamlingen

Att lägga till ett nytt namnutrymme i referenssamlingen i ett projekt gör också objekten i det namnutrymmet tillgängliga för projektet. Den mest synliga effekten av detta är att Visual Studio "Intellisense" hjälper dig att hitta objekten i popup-menyer.

Om du försöker använda ett objekt i ditt program utan referens genererar kodraden ett fel.

Importförklaringen krävs å andra sidan aldrig. Det enda det gör är att låta namnet lösas utan att vara fullt kvalificerat. Med andra ord (betoning tillagd för att visa skillnaderna).

 import System.Data

 Public Class Form1

    Inherits System.Windows.Forms.Form

    Privat underformulär1_Load (... 

       Dim Test As OleDb.OleDbCommand

    Avsluta under

 Slutklass 

och

 import System.Data.OleDb

 Public Class Form1

    Inherits System.Windows.Forms.Form

    Privat underformulär1_Load (... 

       Dim Test As OleDbCommand

    Avsluta under

 Slutklass 

är båda likvärdiga. Men…

 import System.Data

 Public Class Form1

    Inherits System.Windows.Forms.Form

    Privat underformulär1_Load (... 

       Dim Test As OleDbCommand

    Avsluta under

 Slutklass 

resulterar i ett syntaxfel ("Skriv 'OleDbCommand' är inte definierat") på grund av importens namnutrymme System.Data ger inte tillräckligt med information för att hitta objektet OleDbCommand.

Även om kvalificeringen av namn i din programkällkod kan samordnas på valfri nivå i den "uppenbara" hierarkin, måste du fortfarande välja rätt namnområde för referens. Exempelvis tillhandahåller .NET ett System.Web-namnutrymme och en hel lista över andra som börjar med System.Web ...

Notera

Det finns två helt olika DLL-filer för referenserna. Du måste välja rätt eftersom WebService inte är en metod i en av dem.