Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
Gibt an, dass ein oder mehrere deklarierte Programmierelemente einer Klasse oder Struktur im Allgemeinen und nicht einer bestimmten Instanz der Klasse oder Struktur zugeordnet sind.
Durch das Freigeben eines Members einer Klasse oder Struktur wird er für jede Instanz und nicht für nicht freigegebene Elemente verfügbar, wobei jede Instanz ihre eigene Kopie behält. Die Freigabe ist z. B. hilfreich, wenn der Wert einer Variablen für die gesamte Anwendung gilt. Wenn Sie diese Variable als Shared
deklarieren, greifen alle Instanzen auf denselben Speicherort zu. Wenn eine Instanz den Wert der Variablen ändert, greifen alle Instanzen auf den aktualisierten Wert zu.
Die Freigabe ändert nicht die Zugriffsebene eines Members. Zum Beispiel kann ein Klassenmember freigegeben und privat (Zugriff nur innerhalb der Klasse) oder nicht freigegeben und öffentlich sein. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.
Deklarationskontext. Sie können Shared
nur auf Modulebene verwenden. Das bedeutet, dass der Deklarationskontext für ein Shared
-Element eine Klasse oder Struktur sein muss und weder eine Quelldatei noch ein Namespace noch eine Prozedur sein darf.
Kombinierte Modifizierer. Sie können in der gleichen Deklaration Shared
nicht zusammen mit Overrides, Overridable, NotOverridable, MustOverride oder Static angeben.
Zugriff. Sie greifen auf ein freigegebenes Element zu, indem Sie es mit seinem Klassen- oder Strukturnamen qualifizieren, nicht aber mit dem Variablennamen einer bestimmten Instanz seiner Klasse oder Struktur. Sie müssen nicht einmal eine Instanz einer Klasse oder Struktur erstellen, um auf die freigegebenen Member zugreifen zu können.
Im folgenden Beispiel wird die freigegebene Prozedur IsNaN aufgerufen, die von der Double-Struktur verfügbar gemacht wird.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
Implizite Freigabe. Sie können den Shared
-Modifizierer nicht in einer Const-Anweisung verwenden, aber Konstanten werden implizit freigegeben. Ebenso können Sie einen Member eines Moduls oder einer Schnittstelle nicht als Shared
deklarieren, aber sie sind implizit freigegeben.
Speicher Eine freigegebene Variable oder ein freigegebenes Ereignis wird nur einmal im Arbeitsspeicher gespeichert, unabhängig davon, wie viele oder wenige Instanzen Sie von ihrer Klasse oder Struktur erstellen. Ebenso enthält eine freigegebene Prozedur oder Eigenschaft nur einen Satz lokaler Variablen.
Zugriff über eine Instanzvariable. Es ist möglich, auf ein freigegebenes Element zuzugreifen, indem es mit dem Namen einer Variablen qualifiziert wird, die eine bestimmte Instanz ihrer Klasse oder Struktur enthält. Obwohl dies normalerweise wie erwartet funktioniert, generiert der Compiler eine Warnmeldung und nimmt den Zugriff über den Klassen- oder Strukturnamen statt über die Variable vor.
Zugriff über einen Instanzausdruck. Wenn Sie über einen Ausdruck, der eine Instanz seiner Klasse oder Struktur zurückgibt, auf ein freigegebenes Element zugreifen, nimmt der Compiler den Zugriff über den Klassen- oder Strukturnamen vor, anstatt den Ausdruck auszuwerten. Dieser Zugriff führt zu unerwarteten Ergebnissen, wenn Sie beabsichtigen, dass der Ausdruck neben der Rückgabe der Instanz auch andere Aktionen ausführt. Das folgende Beispiel veranschaulicht diese Situation.
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
Im vorherigen Beispiel generiert der Compiler beide Male eine Warnmeldung, wenn der Code über eine Instanz auf die freigegebene Eigenschaft Total
zugreift. In allen Fällen erfolgt der Zugriff direkt über die ShareTotal
-Klasse, ohne dass eine Instanz verwendet wird. Im Falle des beabsichtigten Aufrufs der Prozedur ReturnClass
bedeutet dies, dass sie nicht einmal einen Aufruf von ReturnClass
so generiert, dass die zusätzliche Aktion der Anzeige von „Funktion ReturnClass() aufgerufen“ nicht erfolgt.
Der Shared
-Modifizierer kann in folgenden Kontexten verwendet werden:
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrieren