Shared (Visual Basic)Shared (Visual Basic)

Gibt an, dass eine oder mehrere deklarierte Programmierelemente einer Klasse oder Struktur, die in großen, und nicht mit einer bestimmten Instanz der Klasse oder Struktur zugeordnet sind.Specifies that one or more declared programming elements are associated with a class or structure at large, and not with a specific instance of the class or structure.

HinweiseRemarks

Verwendung freigegebenWhen to Use Shared

Ein Member einer Klasse oder Struktur Freigabe verfügbar macht jede Instanz statt nicht freigegebene, wobei jede Instanz eine eigene Kopie verfügen.Sharing a member of a class or structure makes it available to every instance, rather than nonshared, where each instance keeps its own copy. Dies ist beispielsweise hilfreich, der Wert einer Variablen für die gesamte Anwendung gilt.This is useful, for example, if the value of a variable applies to the entire application. Wenn Sie diese Variable deklarieren Shared, klicken Sie dann alle Instanzen am gleichen Speicherort zugreifen, und wenn eine Instanz der Wert der Variablen ändert, greifen alle Instanzen auf den aktualisierten Wert.If you declare that variable to be Shared, then all instances access the same storage location, and if one instance changes the variable's value, all instances access the updated value.

Freigeben von wird die Zugriffsebene eines Members nicht geändert werden.Sharing does not alter the access level of a member. Ein Klassenmember kann z. B. freigegeben werden und Private (nur von innerhalb der Klasse verfügbar), oder nicht freigegeben und öffentlich.For example, a class member can be shared and private (accessible only from within the class), or nonshared and public. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.For more information, see Access levels in Visual Basic.

RegelnRules

  • Deklarationskontext.Declaration Context. Sie können Shared nur auf Modulebene verwenden.You can use Shared only at module level. Dies bedeutet, dass der Deklarationskontext für eine Shared Element muss eine Klasse oder Struktur sein, und eine Quelldatei, Namespace oder Prozedur nicht möglich.This means the declaration context for a Shared element must be a class or structure, and cannot be a source file, namespace, or procedure.

  • Kombinierte Modifizierer.Combined Modifiers. Sie können keine angeben Shared zusammen mit überschreibt, Overridable, NotOverridable, MustOverride, oder Statische in der gleichen Deklaration.You cannot specify Shared together with Overrides, Overridable, NotOverridable, MustOverride, or Static in the same declaration.

  • Zugriff auf.Accessing. Sie haben einen freigegebenen Elements durch die Qualifizierung mit dem Namen Klasse oder Struktur, die nicht mit dem Variablennamen, die einer bestimmten Instanz der Klasse oder Struktur zugreifen.You access a shared element by qualifying it with its class or structure name, not with the variable name of a specific instance of its class or structure. Sie müssen auch keinen zum Erstellen einer Instanz einer Klasse oder Struktur auf freigegebenen Member zuzugreifen.You do not even have to create an instance of a class or structure to access its shared members.

    Im folgenden Beispiel wird die freigegebene Prozedur IsNaN verfügbar gemacht werden, indem die Double Struktur.The following example calls the shared procedure IsNaN exposed by the Double structure.

    If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.")

  • Implizite freigeben.Implicit Sharing. Können keine der Shared -Modifizierer in einer Const-Anweisung, aber Konstanten sind implizit freigegeben.You cannot use the Shared modifier in a Const Statement, but constants are implicitly shared. Auf ähnliche Weise können Sie nicht Mitglied ein Modul oder eine Schnittstelle sein deklarieren Shared, aber sie werden implizit freigegeben.Similarly, you cannot declare a member of a module or an interface to be Shared, but they are implicitly shared.

VerhaltenBehavior

  • Speicher.Storage. Eine freigegebene Variable oder ein Ereignis wird im Arbeitsspeicher gespeichert, nur nach dem, unabhängig davon, wie viele oder wenige Instanzen der Klasse oder Struktur erstellen.A shared variable or event is stored in memory only once, no matter how many or few instances you create of its class or structure. Analog dazu enthält ein gemeinsames Verfahren oder eine Eigenschaft nur einen Satz von lokalen Variablen.Similarly, a shared procedure or property holds only one set of local variables.

  • Zugriff auf durch eine Instanzvariable.Accessing through an Instance Variable. Es ist möglich, die Zugriff auf einen freigegebenen Elements durch die Qualifizierung mit dem Namen einer Variablen, die eine bestimmte Instanz der Klasse oder Struktur enthält.It is possible to access a shared element by qualifying it with the name of a variable that contains a specific instance of its class or structure. Obwohl dies in der Regel funktioniert wie erwartet, kann der Compiler generiert eine Warnung angezeigt und führt den Zugriff über den Namen der Klasse oder Struktur anstelle der Variablen.Although this usually works as expected, the compiler generates a warning message and makes the access through the class or structure name instead of the variable.

  • Zugriff auf durch einen Instanzausdruck.Accessing through an Instance Expression. Wenn Sie einen freigegebenen Elements durch einen Ausdruck, die eine Instanz ihrer Klasse oder Struktur zurückgibt zugreifen, wird der Compiler den Zugriff durch den Namen der Klasse oder Struktur, anstelle die Auswertung des Ausdrucks.If you access a shared element through an expression that returns an instance of its class or structure, the compiler makes the access through the class or structure name instead of evaluating the expression. Dies erzeugt unerwartete Ergebnisse, wenn das beabsichtigt ist des Ausdrucks, der andere Aktionen sowie die Instanz zurückgeben.This produces unexpected results if you intended the expression to perform other actions as well as returning the instance. Dies wird anhand des folgenden Beispiels veranschaulicht.The following example illustrates this.

    Sub main()  
        shareTotal.total = 10  
        ' The preceding line is the preferred way to access total.  
        Dim instanceVar As New shareTotal  
        instanceVar.total += 100  
        ' The preceding 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.  
        returnClass().total += 1000  
        ' The preceding 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 MsgBox in returnClass() does not run.  
        MsgBox("Value of total is " & CStr(shareTotal.total))  
    End Sub  
    Public Function returnClass() As shareTotal  
        MsgBox("Function returnClass() called")  
        Return New shareTotal  
    End Function  
    Public Class shareTotal  
        Public Shared total As Integer  
    End Class  
    

    Im vorherigen Beispiel generiert der Compiler eine Warnmeldung an beide Male, die der Code greift auf die freigegebene Variable total durch eine Instanz.In the preceding example, the compiler generates a warning message both times the code accesses the shared variable total through an instance. In jedem Fall vereinfacht den Zugriff direkt über die Klasse shareTotal und macht nicht zu einer beliebigen Instanz verwenden.In each case it makes the access directly through the class shareTotal and does not make use of any instance. Im Fall von der beabsichtigten Aufruf der Prozedur returnClass, dies bedeutet, dass Sie selbst generiert keinen Aufruf von returnClass, sodass die zusätzliche Aktion anzeigen von "Function returnClass() namens" nicht ausgeführt wird.In the case of the intended call to the procedure returnClass, this means it does not even generate a call to returnClass, so the additional action of displaying "Function returnClass() called" is not performed.

Der Shared-Modifizierer kann in folgenden Kontexten verwendet werden:The Shared modifier can be used in these contexts:

Dim-AnweisungDim Statement

Event-AnweisungEvent Statement

Function-AnweisungFunction Statement

Operator-AnweisungOperator Statement

Property-AnweisungProperty Statement

Sub-AnweisungSub Statement

Siehe auchSee Also

ShadowsShadows
StaticStatic
Lebensdauer in Visual BasicLifetime in Visual Basic
VerfahrenProcedures
StrukturenStructures
Objekte und KlassenObjects and Classes