Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azt határozza meg, hogy egy vagy több deklarált programozási elem nagy méretű osztályhoz vagy struktúrához legyen társítva, és ne az osztály vagy struktúra egy adott példányához.
Mikor érdemes használni a megosztott halmazt?
Egy osztály vagy struktúra egy tagjának megosztása minden példány számára elérhetővé teszi a nem megosztott példányok helyett, ahol minden példány megőrzi a saját példányát. A megosztás például akkor hasznos, ha egy változó értéke a teljes alkalmazásra vonatkozik. Ha ezt a változót Shared
deklarálja, akkor minden példány ugyanazt a tárolási helyet éri el, és ha egy példány módosítja a változó értékét, az összes példány hozzáfér a frissített értékhez.
A megosztás nem módosítja a tagok hozzáférési szintjét. Az osztálytagok lehetnek például megosztottak és privátak (csak az osztályon belülről érhetők el), vagy nem megosztottak és nyilvánosak. További információ: Hozzáférési szintek a Visual Basicben.
Szabályok
Deklarációs környezet. Csak modulszinten használható
Shared
. Ez azt jelenti, hogy egyShared
elem deklarációs környezetének osztálynak vagy struktúrának kell lennie, és nem lehet forrásfájl, névtér vagy eljárás.Kombinált módosítók. Ugyanabban a deklarációban nem adhat meg
Shared
felülbírálásokat, felülbírálható, Nem módosítható, MustOverride vagy Statikus értéket.Bejutó. A megosztott elemet úgy érheti el, hogy osztály- vagy struktúranévvel minősíti azt, nem pedig az osztály vagy struktúra egy adott példányának változó nevével. Nem is kell létrehoznia egy osztály vagy struktúra egy példányát a megosztott tagok eléréséhez.
Az alábbi példa meghívja a struktúra által Double közzétett megosztott eljárástIsNaN.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
Implicit megosztás. A módosító nem használható const
Shared
utasításban, de az állandók implicit módon meg vannak osztva. Hasonlóképpen nem deklarálhatja egy modul vagy felületShared
tagját, de implicit módon meg van osztva.
Működés
Tárhely. A megosztott változókat vagy eseményeket a rendszer csak egyszer tárolja a memóriában, függetlenül attól, hogy hány vagy néhány példányt hoz létre annak osztályából vagy szerkezetéből. Hasonlóképpen, egy megosztott eljárás vagy tulajdonság csak egy helyi változókészletet tartalmaz.
Hozzáférés egy példányváltozón keresztül. A megosztott elemeket úgy érheti el, hogy egy olyan változó nevével minősíti, amely az osztályának vagy szerkezetének egy adott példányát tartalmazza. Bár ez általában a várt módon működik, a fordító figyelmeztető üzenetet hoz létre, és a változó helyett az osztály vagy a struktúranév használatával teszi lehetővé a hozzáférést.
Hozzáférés egy példánykifejezésen keresztül. Ha egy megosztott elemet egy olyan kifejezésen keresztül ér el, amely az osztály vagy a struktúra egy példányát adja vissza, a fordító a kifejezés kiértékelése helyett az osztály vagy a struktúranév használatával teszi lehetővé a hozzáférést. Ez a hozzáférés váratlan eredményeket eredményez, ha a kifejezést más műveletek végrehajtására, valamint a példány visszaadására szánta. Az alábbi példa ezt a helyzetet szemlélteti.
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
Az előző példában a fordító egy figyelmeztető üzenetet hoz létre, mindkét alkalommal, amikor a kód egy példányon keresztül éri el a megosztott tulajdonságot
Total
. Minden esetben közvetlenül az osztályonShareTotal
keresztül teszi elérhetővé a hozzáférést, és egyetlen példányt sem használ. Az eljárásReturnClass
tervezett hívása esetén ez azt jelenti, hogy még csak nem is hoz létre hívástReturnClass
, így a függvény returnclass() meghívásának további művelete nem történik meg.
A Shared
módosító az alábbi környezetekben használható: