In Visual Basic wordt de scope van variabelen bepaald door de plaats waar ze zijn verklaard: binnen een procedure (lokale variabele), op class/module-niveau (class of module variabele), of als globaal (in een apart bestand).
Dim binnen een procedure – de variabele is alleen toegankelijk binnen deze procedure.Dim op class of module-niveau – is toegankelijk in alle procedures van de class/module.Public, Private, Friend – stelt beperkingen voor toegang vanuit andere classes/modules.Voorbeeld:
Module Module1 Dim moduleVar As Integer = 5 Sub Main() Dim localVar As Integer = 10 Console.WriteLine(moduleVar) ' Toegankelijk Console.WriteLine(localVar) ' Toegankelijk End Sub Sub OtherSub() Console.WriteLine(moduleVar) ' Toegankelijk Console.WriteLine(localVar) ' Fout! End Sub End Module
Welke scope heeft een variabele die is verklaard met behulp van
Staticbinnen een procedure?
Antwoord:
Een variabele die is verklaard met het sleutelwoord Static binnen een procedure, blijft alleen toegankelijk binnen deze procedure, maar de waarde ervan blijft behouden tussen aanroepen van de procedure.
Voorbeeld:
Sub Counter() Static count As Integer count = count + 1 Console.WriteLine(count) End Sub ' Elke aanroep van Counter verhoogt count
Verhaal
In het project was er een vlag variabele Dim x As Boolean verklaard binnen een For-lus, in de veronderstelling dat deze "gereset" zou worden bij elke nieuwe iteratie (zoals in sommige andere talen). Maar na het verlaten van de lus bleef de variabele toegankelijk, wat onvoorspelbaar gedrag veroorzaakte na de tweede aanroep van de procedure.
Verhaal
Een van de programmeurs verklaarde een public variabele in de module, en deze werd per ongeluk overschreven door een andere module met dezelfde naam, wat leidde tot kritieke fouten in verschillende delen van het programma. Dit maakte debuggen moeilijk en niemand kon begrijpen wat de oorzaak was.
Verhaal
Een student verklaarde een Static variabele voor het accumuleren van een som in één subroutine, in de veronderstelling dat deze bij elke aanroep "gecleared" werd. Resultaat – bij herhaalde aanroepen groeide de som, wat resulteerde in een onjuiste uitkomst.