In Visual Basic verliezen variabelen binnen procedures meestal hun waarde na de voltooiing van de aanroep. Het trefwoord Static stelt de variabele in staat om zijn waarde tussen oproepen van de procedure te behouden.
Achtergrond van de kwestie:
In klassiek Visual Basic (VB6) en VB.NET werd Static vaak gebruikt voor het maken van tellers en vlaggen zonder gebruik te maken van klasse- of modulevelden.
Probleem:
Een ontwikkelaar kan gewone lokale variabelen gebruiken, in de veronderstelling dat ze "duurzaam" zijn, terwijl ze worden gereset bij elke oproep. Aan de andere kant kan de gekozen plaats (procedure of codeblok) voor de statische variabele foutief zijn.
Oplossing:
Declareer een variabele met Static binnen de procedure. Deze wordt één keer geïnitialiseerd bij de eerste aanroep van de procedure en behoudt daarna zijn waarde tussen oproepen.
Voorbeeldcode:
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"Aantal oproepen: {counter}") End Sub ' Oproepen geven verschillende waarden CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
Belangrijke kenmerken:
Static-variabele bestaat alleen binnen de scope van de procedure, maar behoudt zijn waarde tussen oproepen.Wat is het verschil tussen Static in een procedure en een klasseveld met de modifier Shared?
De Static-variabele werkt alleen binnen die procedure - elke instantie van de methode krijgt zijn eigen onafhankelijke statische variabele. Het Shared-veld van de klasse is er maar één voor de hele klasse.
Kan ik een Static-variabele declareren in een For- of If-blok?
Nee, Static-variabelen worden alleen op het hoogste niveau van een procedure gedeclareerd, niet binnen geneste blokken (For, If).
Wat gebeurt er als de procedure met Static vanuit meerdere threads wordt aangeroepen?
In de VB.NET-versie is de scope van Static-variabelen gebonden aan elke thread, wat race conditions en onverwachte waarden kan veroorzaken bij meervoudige aanroepen vanuit threads.
In de procedure voor het berekenen van de gebruikersreactie op een toetsdruk, wordt Static gebruikt voor het opslaan van de reactietijd, maar er wordt geen rekening gehouden met gelijktijdige indrukken door meerdere gebruikers (bijvoorbeeld een webapplicatie of een meerthreadige interface).
Voordelen:
Nadelen:
Static wordt gebruikt om een interne oproepenteller op te slaan van een hulpfunctie, die alleen synchroon vanuit één thread wordt aangeroepen.
Voordelen:
Nadelen: