Freigegebene Member in Visual Basic
Aktualisiert: November 2007
Freigegebene Member sind Eigenschaften, Prozeduren und Felder, die von allen Instanzen einer Klasse oder Struktur gemeinsam verwendet werden. In einigen Programmiersprachen werden diese Elemente auch als statische Member bezeichnet.
Freigegebene Felder und Eigenschaften
Freigegebene Felder und Eigenschaften sind sinnvoll für Informationen, die Teil einer Klasse sind, ohne jedoch einer bestimmten Instanz der Klasse eigen zu sein. Wenn Sie den Wert eines freigegebenen Felds oder einer freigegebenen Eigenschaft ändern, wird damit der Wert geändert, der der Klasse und sämtlichen Instanzen der Klasse zugeordnet ist.
Wird andererseits der Wert eines nicht freigegebenen Felds oder einer nicht freigegebenen Eigenschaft geändert, der nicht einer bestimmten Instanz zugeordnet ist, dann wirkt sich dies nicht auf den Wert dieses Felds bzw. dieser Eigenschaft in anderen Instanzen der Klasse aus. Nicht freigegebene Felder und Eigenschaften sind für jede Instanz einer Klasse unabhängig von anderen Instanzen vorhanden.
Deswegen verhalten sich freigegebene Felder und Eigenschaften wie globale Variablen, auf die nur über Instanzen einer Klasse oder unter Angabe des Klassennamens zugegriffen werden kann. Ohne freigegebene Felder und Eigenschaften müssten Sie Variablen auf Modulebene verwenden, um den gleichen Effekt zu erzielen. Variablen auf Modulebene erschweren jedoch das Verständnis und die Verwaltung von Klassen. Darüber hinaus stellt eine solche Verwendung von Variablen auf Modulebene eine Verletzung des durch Klassen repräsentierten Konzepts der Kapselung dar.
Freigegebene Prozeduren
Freigegebene Prozeduren sind Klassenmethoden, die nicht mit einer bestimmten Instanz einer Klasse verbunden sind. Die innerhalb der Math-Klasse definierte Cos-Methode ist beispielsweise eine freigegebene Methode. Sie können freigegebene Prozeduren entweder als Methode eines Objekts oder direkt aus der Klasse heraus aufrufen.
Freigegebene Prozeduren und Eigenschaften haben keinen Zugriff auf Instanzen der Klasse. Deshalb sind nur gekennzeichnete Verweise auf nicht freigegebene Datenmember in freigegebenen Methoden zulässig.
Hinweis: |
---|
Schreiben Sie nach Möglichkeit keinen Code, in dem über eine Instanz der Klasse auf einen freigegebenen Member zugegriffen wird. Der Grund hierfür ist, dass der Compiler die Kennzeichnung des freigegebenen Members nicht beachtet und sich so verhält, als würde direkt über die Klasse auf den Member zugegriffen. Gelegentlich soll das kennzeichnende Objekt Code ausführen, und daher generiert der Visual Basic-Compiler eine Warnung, wenn über eine Instanz einer Klasse auf einen freigegebenen Member zugegriffen wird. IntelliSense zeigt keine freigegebenen Member für eine Instanz der Klasse an. |
Freigegebene Member – Beispiel
Das folgende Beispiel erstellt ein freigegebenes Feld, zwei Instanzenfelder und eine freigegebene Methode, um darzustellen, wie sich freigegebene Member im Code verhalten:
Public Class Item
Public Shared Count As Integer = 1
Public Shared Sub ShareMethod()
MsgBox("Current value of Count: " & Count)
End Sub
Public Sub New(ByVal Name As String)
' Use Count to initialize SerialNumber.
Me.SerialNumber = Count
Me.Name = Name
' Increment the shared variable
Count += 1
End Sub
Public SerialNumber As Integer
Public Name As String
Public Sub InstanceMethod()
MsgBox("Information in the first object: " & _
Me.SerialNumber & vbTab & Me.Name)
End Sub
End Class
Sub TestShared()
' Create two instances of the class.
Dim part1 As New Item("keyboard")
Dim part2 As New Item("monitor")
part1.InstanceMethod()
part2.InstanceMethod()
Item.ShareMethod()
End Sub
Wenn Sie die TestShared-Prozedur ausführen, werden zwei Instanzen der Klasse erstellt. Der Konstruktor verwendet das freigegebene Feld Count, um das Instanzenfeld SerialNumber zu initialisieren, und inkrementiert dann Count. Mit dieser Technik wird jeder Instanz automatisch eine andere Seriennummer zugewiesen.
Nach der Erstellung der beiden Instanzen wird die Instanzenmethode ShareMethod für beide Objekte aufgerufen, und die freigegebene Methode InstanceMethod wird ebenfalls aufgerufen. Die Ausgabe lautet:
Information in the first object: 1 keyboard
Information in the second object: 2 monitor
Current value of the shared Count field: 3