Gedeeld (Visual Basic)
Hiermee geeft u op dat een of meer gedeclareerde programmeerelementen zijn gekoppeld aan een klasse of structuur, en niet met een specifiek exemplaar van de klasse of structuur.
Wanneer gedeeld gebruiken
Als u een lid van een klasse of structuur deelt, is deze beschikbaar voor elk exemplaar, in plaats van niet-gedeeld, waarbij elk exemplaar een eigen kopie bewaart. Delen is bijvoorbeeld handig als de waarde van een variabele van toepassing is op de hele toepassing. Als u deze variabele Shared
declareert, hebben alle exemplaren toegang tot dezelfde opslaglocatie en als één exemplaar de waarde van de variabele wijzigt, krijgen alle exemplaren toegang tot de bijgewerkte waarde.
Delen wijzigt het toegangsniveau van een lid niet. Een klaslid kan bijvoorbeeld worden gedeeld en privé (alleen toegankelijk vanuit de klas) of niet-gedeeld en openbaar. Zie Access-niveaus in Visual Basic voor meer informatie.
Regels
Declaratiecontext. U kunt alleen op moduleniveau gebruiken
Shared
. Dit betekent dat de declaratiecontext voor eenShared
element een klasse of structuur moet zijn en geen bronbestand, naamruimte of procedure kan zijn.Gecombineerde modifiers. U kunt niet opgeven
Shared
samen met onderdrukkingen, overschrijfbaar, notoverridable, MustOverride of statisch in dezelfde declaratie.Toegang krijgen tot. U opent een gedeeld element door het te kwalificeren met de klasse- of structuurnaam, niet met de variabelenaam van een specifiek exemplaar van de klasse of structuur. U hoeft zelfs geen exemplaar van een klasse of structuur te maken voor toegang tot de gedeelde leden.
In het volgende voorbeeld wordt de gedeelde procedure IsNaN aangeroepen die door de Double structuur wordt weergegeven.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
Impliciet delen. U kunt de
Shared
wijzigingsfunctie niet gebruiken in een Const-instructie, maar constanten worden impliciet gedeeld. Op dezelfde manier kunt u geen lid van een module of een interface declareren,Shared
maar ze worden impliciet gedeeld.
Gedrag
Opslag. Een gedeelde variabele of gebeurtenis wordt slechts eenmaal in het geheugen opgeslagen, ongeacht hoeveel of weinig exemplaren u maakt van de klasse of structuur. Op dezelfde manier bevat een gedeelde procedure of eigenschap slechts één set lokale variabelen.
Toegang tot een exemplaarvariabele. Het is mogelijk om toegang te krijgen tot een gedeeld element door het te kwalificeren met de naam van een variabele die een specifiek exemplaar van de klasse of structuur bevat. Hoewel dit meestal werkt zoals verwacht, genereert de compiler een waarschuwingsbericht en maakt de toegang via de klasse- of structuurnaam in plaats van de variabele.
Toegang tot een exemplaarexpressie. Als u een gedeeld element opent via een expressie die een exemplaar van de klasse of structuur retourneert, maakt de compiler de toegang via de klasse- of structuurnaam in plaats van de expressie te evalueren. Deze toegang levert onverwachte resultaten op als u de expressie hebt bedoeld om andere acties uit te voeren en het exemplaar te retourneren. In het volgende voorbeeld ziet u deze situatie.
Sub Main() ' The following line is the preferred way to access Total. ShareTotal.Total = 10 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of through ' the variable instanceVar. This works as expected and adds ' 100 to Total. Dim instanceVar As New ShareTotal instanceVar.Total += 100 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of calling ' ReturnClass(). This adds 1000 to total but does not work as ' expected, because the WriteLine in ReturnClass() does not run. Console.WriteLine("Value of total is " & CStr(ShareTotal.Total)) ReturnClass().Total += 1000 End Sub Public Function ReturnClass() As ShareTotal Console.WriteLine("Function ReturnClass() called") Return New ShareTotal End Function Public Class ShareTotal Public Shared Property Total As Integer End Class
In het voorgaande voorbeeld genereert de compiler beide keren een waarschuwingsbericht dat de code toegang heeft tot de gedeelde eigenschap
Total
via een exemplaar. In elk geval wordt de toegang rechtstreeks via de klasseShareTotal
uitgevoerd en wordt er geen gebruikgemaakt van een exemplaar. In het geval van de beoogde aanroep van de procedureReturnClass
, betekent dit dat het niet eens een aanroep naarReturnClass
genereert, zodat de extra actie voor het weergeven van "Function ReturnClass() aangeroepen" niet wordt uitgevoerd.
De Shared
wijzigingsfunctie kan in deze contexten worden gebruikt:
- Dim-instructie
- Gebeurtenisinstructie
- Functie-instructie
- Operatorinstructie
- Eigenschapsinstructie
- Subinstructie