Share via


Objektorientierte Änderungen für Module in Visual Basic

Aktualisiert: November 2007

Freigegebene Member sind wie Eigenschaften und Prozeduren Klassenmember. Sie stehen allen Instanzen einer Klasse zur Verfügung, sind jedoch keiner bestimmten Instanz einer Klasse zugeordnet. Weitere Informationen über freigegebene Member finden Sie unter Freigegebene Member in Visual Basic.

Instanzdaten und freigegebene Daten

Instanzdaten sind die Daten, die erstellt werden, wenn das New-Schlüsselwort ausgeführt wird. Im Gegensatz dazu werden die freigegebenen Daten einer Klasse unabhängig von der Ausführung des New-Schlüsselworts erstellt.

Visual Basic 6.0

Visual Basic 6.0 unterstützt keine freigegebenen Daten in Klassendefinitionen. Für die Freigabe von Daten in Klasseninstanzen wird eine globale Variable in einem Modul verwendet.

Visual Basic 2008

Freigegebene Daten werden deklariert, indem der Shared (Visual Basic)-Modifizierer der Variablendeklarationsanweisung hinzugefügt wird, wie im Folgenden dargestellt.

Private Shared totalInstances As Integer

Shared-Methoden

Visual Basic 6.0

Visual Basic 6.0 unterstützt keine freigegebenen Klassenmember. Vergleichbare Funktionen stehen in Modulen zur Verfügung. Die Laufzeit erstellt nur eine Instanz der Daten in einem Modul. Die Daten und Methoden eines Moduls sind innerhalb eines Projekts gültig. Hier folgt ein Beispiel für eine in einem Modul implementierte Bibliothek:

Public Sub GetTitle(wordXml As String)
    ' Add code here to find title in Xml string.
End Sub

Public Sub ReplaceTitle(wordXml As String, newTitle As String)
    ' Add code here to replace title.
End Sub

Visual Basic 2008

In einem eher objektorientierten Ansatz für Module werden freigegebene Klassenmember verwendet, wenn die Member eine zusammenhängende Bibliothek bilden oder wenn sie sich auf eine vorhandene Klasse beziehen. Der Entwurf bestimmt, ob alle Member freigegeben sind, oder ob eine Klasse über freigegebene Member und Instanzmember verfügt. Wenn die Klasse nur freigegebene Member enthält, wird nur durch das Hinzufügen eines private-Konstruktors verhindert, dass die Klasse vom Clientcode instanziiert wird. Das folgende Beispiel zeigt eine Klasse, die durch den Clientcode nicht instanziiert werden kann, und den Clientcode, der einen der Member aufruft.

Public Class WordLibrary
    Public Shared Sub GetTitle(ByVal wordXml As String)
        ' Add code here to find title in Xml string.
    End Sub

    Public Shared Sub ReplaceTitle(ByVal wordXml As String, _
        ByVal newTitle As String)
        ' Add code here to replace title.
    End Sub

    Private Sub New()
        ' This prevents instantiation of the class in the client.
    End Sub
End Class
' Code that calls the library method.
Sub ChangeTheTitle()
    WordLibrary.ReplaceTitle("Old Title", "New Title")
End Sub

Die Verwendung einer Klasse anstelle eines Moduls für diese Bibliothek bietet unter anderem folgende Vorteile:

  • Die Bibliothek hat einen Namen, WordLibrary, der im Code explizit aufgerufen wird.

  • Die Methoden werden in einer Klasse zusammengefasst. Dadurch werden ihre wechselseitigen Beziehungen sichtbar.

  • Die Verwendung eines private-Konstruktors verdeutlicht, dass diese Klasse einen Satz von Dienstprogrammmethoden enthält.

  • Im Clientcode wird der Bibliotheksname verwendet, wodurch dem Leser die Projektorganisation verdeutlicht wird.

In .NET Framework werden freigegebene Methoden im Allgemeinen verwendet, um Funktionen bereitzustellen, die mit einer Klasse zusammenhängen, jedoch keine Instanz der Klasse benötigen. Ein Beispiel ist die Parse-Methode, die von vielen Datentypen in .NET Framework unterstützt wird. Der Integer-Datentyp (Visual Basic) unterstützt eine Parse-Methode, die eine Zeichenfolge als Parameter annimmt. Die Parse-Methode gibt die durch die Zeichenfolge dargestellte ganze Zahl zurück. Es ergibt keinen Sinn, wenn die Parse-Methode eine Membermethode ist. Es ist kein Ganzzahlwert zu bearbeiten, sondern nur eine Zeichenfolge.

Zugreifen auf freigegebene Member

Visual Basic 6.0

Visual Basic 6.0 unterstützt keine freigegebenen Klassenmember.

Visual Basic 2008

Auf freigegebene Member kann über den Klassennamen oder über den Instanznamen zugegriffen werden, wie unten dargestellt.

WordLibrary.ReplaceTitle("Old Title", "New Title")

Freigegebene Methoden können nur dann auf Instanzdaten zugreifen, wenn an die freigegebene Methode ein Verweis auf eine Instanz der Klasse übergeben wird.

Vorschläge zur Aktualisierung

Das WordLibrary-Modul in Visual Basic 6.0 wird auf den folgenden Code aktualisiert:

Module WordLibrary
    Public Sub GetTitle(ByRef wordXml As String)
        ' Add code here to find title in Xml string.
    End Sub

    Public Sub ReplaceTitle(ByRef wordXml As String, _
        ByRef newTitle As String)
        ' Add code here to replace title.
    End Sub
End Module

Beim Aktualisieren von Modulcode von Visual Basic 6.0 auf Visual Basic 2008 sollten Sie Folgendes beachten:

  • Organisieren Sie Modulmethoden und -daten als freigegebene Methoden und Daten in Klassen.

  • Verschieben Sie Modulmethoden als freigegebene Methoden in vorhandene Klassen, wenn die Methode mit der Klasse verwandt ist.

Siehe auch

Konzepte

Freigegebene Member in Visual Basic