Delen via


Problemen met variabelen in Visual Basic oplossen

Deze pagina bevat enkele veelvoorkomende problemen die kunnen optreden bij het werken met variabelen in Visual Basic.

Kan geen toegang krijgen tot leden van een object

Als uw code toegang probeert te krijgen tot een eigenschap of methode voor een object, zijn er twee mogelijke foutresultaten:

  • De compiler kan een foutbericht genereren als u de objectvariabele declareert als van een specifiek type en vervolgens verwijst naar een lid dat niet door dat type is gedefinieerd.

  • Er treedt een runtime MemberAccessException op wanneer het object dat is toegewezen aan een objectvariabele het lid dat uw code probeert te openen, niet beschikbaar maakt. In het geval van een variabele van het objectgegevenstype kunt u deze uitzondering ook krijgen als het lid niet Publicis. Dit komt doordat late binding alleen toegang toestaat voor Public leden.

Wanneer de strikte instructie optie typecontrole Oninstelt, heeft een objectvariabele alleen toegang tot de methoden en eigenschappen van de klasse waarmee u deze declareert. In het volgende voorbeeld ziet u dit.

Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label 
' in pixels.
k = q.Left

In dit voorbeeld p kunnen alleen de leden van de Object klasse zelf worden gebruikt, die de Left eigenschap niet bevatten. Aan de andere kant q werd gedeclareerd als van het type Label, zodat alle methoden en eigenschappen van de Label klasse in de System.Windows.Forms naamruimte kunnen worden gebruikt.

Juiste aanpak

Als u toegang wilt krijgen tot alle leden van een object van een bepaalde klasse, declareert u de objectvariabele als van het type van die klasse, indien mogelijk. Als u dit niet kunt doen, bijvoorbeeld als u het objecttype niet weet tijdens het compileren, moet u instellen Option Strict op Off en declareren dat de variabele van het objectgegevenstype is. Hierdoor kunnen objecten van elk type worden toegewezen aan de variabele en moet u stappen ondernemen om ervoor te zorgen dat het momenteel toegewezen object van een acceptabel type is. U kunt de TypeOf-operator gebruiken om deze beslissing te nemen.

Andere onderdelen hebben geen toegang tot uw variabele

Namen van Visual Basic zijn niet hoofdlettergevoelig. Als twee namen alleen in alfabetisch geval verschillen, interpreteert de compiler deze als dezelfde naam. Er wordt bijvoorbeeld rekening gehouden met ABC en abc om te verwijzen naar hetzelfde opgegeven element.

De Common Language Runtime (CLR) maakt echter gebruik van hoofdlettergevoelige binding. Wanneer u daarom een assembly of een DLL produceert en deze beschikbaar maakt voor andere assembly's, zijn uw namen niet langer hoofdlettergevoelig. Als u bijvoorbeeld een klasse definieert met een -element met de naam ABC, en andere assembly's gebruikmaken van uw klasse via de runtime voor algemene taal, moeten ze naar het element verwijzen als ABC. Als u vervolgens uw klasse opnieuw compileert en de naam van het element wijzigt in abc, hebben de andere assembly's die uw klasse gebruiken, geen toegang meer tot dat element. Wanneer u een bijgewerkte versie van een assembly uitbrengt, moet u daarom het alfabetische hoofdlettergebruik van openbare elementen niet wijzigen.

Zie Common Language Runtime voor meer informatie.

Juiste aanpak

Als u andere onderdelen toegang wilt geven tot uw variabelen, behandelt u hun namen alsof ze hoofdlettergevoelig zijn. Wanneer u uw klasse of module test, moet u ervoor zorgen dat andere assembly's zijn gebonden aan de variabelen die u verwacht. Zodra u een onderdeel hebt gepubliceerd, moet u geen wijzigingen aanbrengen in bestaande namen van variabelen, inclusief het wijzigen van de cases.

Verkeerde variabele die wordt gebruikt

Wanneer u meer dan één variabele met dezelfde naam hebt, probeert de Visual Basic-compiler elke verwijzing naar die naam op te lossen. Als de variabelen een ander bereik hebben, lost de compiler een verwijzing naar de declaratie op met het smalste bereik. Als ze hetzelfde bereik hebben, mislukt de oplossing en signaleren de compiler een fout. Zie Verwijzingen naar gedeclareerde elementen voor meer informatie.

Juiste aanpak

Vermijd het gebruik van variabelen met dezelfde naam, maar met een ander bereik. Als u andere assembly's of projecten gebruikt, vermijd dan zoveel mogelijk namen die in die externe onderdelen zijn gedefinieerd. Als u meer dan één variabele met dezelfde naam hebt, moet u ervoor zorgen dat u elke verwijzing ernaar in aanmerking komt. Zie Verwijzingen naar gedeclareerde elementen voor meer informatie.

Zie ook