In Visual Basic wordt het trefwoord Imports gebruikt om namespaces te verbinden, zodat de toegang tot klassen en functies eenvoudiger is, zonder de volledige hiërarchie aan te geven. Dit is vooral belangrijk bij het werken aan grote projecten of het gebruik van externe bibliotheken.
In eerdere versies van VB was het gebruik van externe klassen moeilijk vanwege de noodzaak om voortdurend het volledige pad naar het type aan te geven. Met de introductie van namespaces en de Imports-instructie kregen ontwikkelaars een handige manier om de benodigde delen van de bibliotheek te verbinden en hun werk te versnellen.
Wanneer er in twee bibliotheken typen met dezelfde naam zijn, ontstaat het risico van ambiguïteit. Bovendien kan een onterecht overmatig aantal regels met Imports-instructies leiden tot conflicten en fouten bij de naamresolutie.
Om verwarring te voorkomen, wordt aangeraden om aliassen te gebruiken via de constructie Imports alias = Namespace.Type, en bij conflicten het volledige type naam expliciet in de code aan te geven.
Voorbeeldcode:
Imports System.Text Imports txt = System.Text Module Module1 Sub Main() Dim sb As New StringBuilder() txt.StringBuilder ' Gebruik alias End Sub End Module
Belangrijke kenmerken:
Kan de Imports-instructie binnen een procedure of klasse worden geplaatst?
Nee, de Imports-instructie is alleen toegestaan op bestands- of namespace-niveau, maar niet binnen procedures, functies of klassen. Het plaatsen ervan binnen een codeblok zal een compilatiefout veroorzaken.
Wat gebeurt er als je dezelfde types uit verschillende namespaces zonder aliassen gebruikt?
Bij toegang tot een type met een onopgelost naamconflict, zal de compiler een fout geven: "Type is ambiguous in the namespace". Je moet of het volledige pad expliciet opgeven of aliassen gebruiken.
Imports System.Drawing Imports MyProject.Drawing Sub Foo() Dim img As Image ' Ambiguïteitsfout Dim sysImg As System.Drawing.Image ' Correct End Sub
Kan je met Imports een namespace vanuit een niet-geregistreerde assembly verbinden?
Nee, voordat je Imports gebruikt, moet de assembly aan het project worden toegevoegd via "Add Reference". Zonder dit zal de compiler de externe namespace niet zien.
Een ontwikkelaar voegde tegelijkertijd Imports System.Data en Imports System.Web.UI.WebControls toe zonder aliassen. Later in de code ontstond een conflict met de naam DataTable, en hij verspilde veel tijd met het zoeken naar de oorzaak van de fout.
Voordelen:
Nadelen:
Een andere ontwikkelaar gebruikt alias-import: Imports DBTable = System.Data.DataTable, wat hem in staat stelt om objecten duidelijk te onderscheiden, zelfs als er in andere namespaces vergelijkbare namen zijn.
Voordelen:
Nadelen: