Structure-Anweisung

Aktualisiert: November 2007

Deklariert den Namen einer Struktur und führt die Definitionen der Variablen, Eigenschaften, Ereignisse und Prozeduren ein, die die Struktur enthält.

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
        datamemberdeclarations
    [ methodmemberdeclarations ]
End Structure

Bestandteile

  • attributelist
    Optional. Siehe Attributliste.

  • accessmodifier
    Optional. Einer der folgenden Werte ist möglich:

    Siehe Zugriffsebenen in Visual Basic.

  • Shadows
    Optional. Siehe Shadows.

  • Partial
    Optional. Gibt eine partielle Definition der Struktur an. Siehe Partial (Visual Basic).

  • name
    Erforderlich. Name der Struktur. Siehe Namen deklarierter Elemente.

  • Of
    Optional. Gibt an, dass dies eine generische Struktur ist.

  • typelist
    Erforderlich, wenn Sie das Of-Schlüsselwort verwenden. Liste mit Typparametern für diese Struktur. Siehe Typliste.

  • Implements
    Optional. Gibt an, dass diese Struktur die Member einer oder mehrerer Schnittstellen implementiert. Siehe Implements-Anweisung.

  • interfacenames
    Erforderlich, wenn Sie die Implements-Anweisung verwenden. Die Namen der von dieser Struktur implementierten Schnittstellen.

  • datamemberdeclarations
    Erforderlich. Eine oder mehrere der Anweisungen Const, Dim, Enum oder Event, die Datenmember der Struktur deklarieren.

  • methodmemberdeclarations
    Optional. 0 (null) oder mehr Deklarationen der Prozeduren Function, Operator, Property oder Sub, die als Methodenmember der Struktur fungieren.

  • End Structure
    Erforderlich. Beendet die Structure-Definition.

Hinweise

Die Structure-Anweisung definiert einen zusammengesetzten Werttyp, den Sie anpassen können. Eine Struktur ist eine Verallgemeinerung des benutzerdefinierten Typs (UDT, User-Defined Type) aus älteren Versionen von Visual Basic. Weitere Informationen finden Sie unter Strukturen: Benutzerdefinierte Datentypen.

Strukturen unterstützen viele Features, die auch von Klassen unterstützt werden. Strukturen können z. B. Eigenschaften und Prozeduren aufweisen, Schnittstellen implementieren und parametrisierte Konstruktoren enthalten. Allerdings bestehen zwischen Strukturen und Klassen erhebliche Unterschiede in den Bereichen Vererbung, Deklariationen und Verwendung. Außerdem sind Klassen Verweistypen, und Strukturen sind Werttypen. Weitere Informationen finden Sie unter Strukturen und Klassen.

Structure kann nur auf Namespace- oder Modulebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für eine Struktur eine Quelldatei, ein Namespace, eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle sein muss und weder eine Prozedur noch ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Der Standardzugriff für Strukturen ist Friend (Visual Basic). Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Regeln

  • Schachtelung. Sie können eine Struktur in einer anderen Struktur definieren. Die äußere Struktur wird als enthaltende Struktur und die innere Struktur als geschachtelte Struktur bezeichnet. Sie können jedoch nicht über die enthaltende Struktur auf die Member einer geschachtelten Struktur zugreifen. Stattdessen müssen Sie eine Variable mit dem Datentyp der geschachtelten Struktur deklarieren.

  • Memberdeklaration. Sie müssen jeden Member einer Struktur deklarieren. Ein Strukturmember kann nicht Protected oder Protected Friend sein, da aus einer Struktur nicht geerbt werden kann. Die Struktur selbst kann jedoch Protected oder Protected Friend sein.

    Sie müssen in einer Struktur mindestens eine nicht freigegebene Variable oder mindestens ein weder freigegebenes noch benutzerdefiniertes Ereignis deklarieren. Es ist nicht möglich, nur Konstanten, Eigenschaften und Prozeduren zu definieren, selbst wenn einige davon nicht gemeinsam genutzt werden.

  • Initialisierung. Der Wert von nicht freigegebenen Datenmembern einer Struktur kann nicht in der Deklaration initialisiert werden. Sie müssen einen solchen Datenmember entweder mit einem parametrisierten Konstruktor auf Strukturebene initialisieren oder dem Member nach dem Erstellen einer Instanz der Struktur einen Wert zuweisen.

  • Vererbung. Eine Struktur kann von keinem anderen Typ als von ValueType erben, von dem alle Strukturen erben. Insbesondere kann eine Struktur nicht von einer anderen Struktur erben.

    Sie können die Inherits-Anweisung nicht in einer Strukturdefinition verwenden, auch nicht zum Angeben von ValueType.

  • Implementierung. Wenn die Struktur die Implements-Anweisung verwendet, müssen Sie alle Member implementieren, die durch jede in interfacenames angegebene Schnittstelle definiert sind.

  • Standardeigenschaft. Eine Struktur kann höchstens eine Eigenschaft als ihre Standardeigenschaft angeben. Dies erfolgt mit dem Default (Visual Basic)-Modifizierer. Weitere Informationen finden Sie unter Standardeigenschaften.

Verhalten

  • Zugriffsebene. In einer Struktur können Sie jeden Member mit einer eigenen Zugriffsebene deklarieren. Der Standardzugriff für alle Strukturmember ist Public (Visual Basic). Beachten Sie, dass der Zugriff auf die Member einer Struktur automatisch eingeschränkt ist, wenn die Struktur selbst über eine restriktivere Zugriffsebene verfügt, selbst wenn Sie die Zugriffsebenen der Member mit den Zugriffsmodifizierern anpassen.

  • Gültigkeitsbereich. Der Gültigkeitsbereich einer Struktur umfasst den Namespace, die Klasse, Struktur oder das Modul, in dem bzw. der sich die Struktur befindet.

    Der Gültigkeitsbereich eines Strukturmembers umfasst die gesamte Struktur.

  • Lebensdauer. Eine Struktur selbst verfügt nicht über eine Lebensdauer. Stattdessen verfügt jede Instanz der Struktur über eine Lebensdauer, die von allen anderen Instanzen unabhängig ist.

    Die Lebensdauer einer Instanz beginnt mit ihrer Erstellung durch eineNew (Visual Basic)-Klausel. Sie endet, wenn die Lebensdauer der Variablen endet, die sie enthält.

    Sie können die Lebensdauer einer Strukturinstanz nicht verlängern. Eine den Funktionen einer statischen Struktur ähnelnde Funktionalität wird von einem Modul bereitgestellt. Weitere Informationen finden Sie unter Module-Anweisung.

    Strukturmember verfügen über eine Lebensdauer, die davon abhängt, wie und wo sie deklariert werden. Weitere Informationen finden Sie in Class-Anweisung (Visual Basic) unter "Lebensdauer".

  • Qualifizierung. In Code außerhalb einer Struktur muss der Name eines Members mit dem Namen dieser Struktur qualifiziert werden.

    Wenn Code in einer geschachtelten Struktur einen nicht qualifizierten Verweis auf ein Programmierelement enthält, sucht Visual Basic das Element zunächst in der geschachtelten Struktur, anschließend in der enthaltenden Struktur und so weiter bis zum äußersten enthaltenden Element. Weitere Informationen finden Sie unter Auflösen eines Verweises bei mehreren Variablen mit gleichem Namen.

  • Speicherverbrauch. Wie bei allen zusammengesetzten Datentypen können Sie den gesamten Speicherverbrauch auch bei Strukturen durch Addition der nominalen Speicherzuordnungen ihrer Member nicht zuverlässig berechnen. Darüber hinaus können Sie nicht davon ausgehen, dass die Member im Speicher in derselben Reihenfolge wie in der Deklaration angeordnet sind. Wenn Sie das Speicherlayout einer Struktur steuern müssen, können Sie das StructLayoutAttribute-Attribut auf die Structure-Anweisung anwenden.

Beispiel

Im folgenden Beispiel wird die Structure-Anweisung für die Definition einer Gruppe verknüpfter Daten für einen Mitarbeiter verwendet. Es veranschaulicht die Verwendung von Membern mit dem Zugriff Public, Friend und Private, um den Grad der Vertraulichkeit der Datenelemente widerzuspiegeln. Es zeigt außerdem Prozedur-, Eigenschaften- und Ereignismember.

Public Structure employee
    ' Public members, accessible from throughout declaration region.
    Public firstName As String
    Public middleName As String
    Public lastName As String
    ' Friend members, accessible from anywhere within the same assembly.
    Friend employeeNumber As Integer
    Friend workPhone As Long
    ' Private members, accessible only from within the structure itself.
    Private homePhone As Long
    Private level As Integer
    Private salary As Double
    Private bonus As Double
    ' Procedure member, which can access structure's private members.
    Friend Sub calculateBonus(ByVal rate As Single)
        bonus = salary * CDbl(rate)
    End Sub
    ' Property member to return employee's eligibility.
    Friend ReadOnly Property eligible() As Boolean
        Get
            Return level >= 25
        End Get
    End Property
    ' Event member, raised when business phone number has changed.
    Public Event changedWorkPhone(ByVal newPhone As Long)
End Structure

Siehe auch

Aufgaben

Gewusst wie: Konvertieren eines benutzerdefinierten Typs in eine Visual Basic-Struktur

Konzepte

Strukturen und Klassen

Empfehlung zur Aktualisierung: Vermeiden von Arrays und Zeichenfolgen fester Länge in benutzerdefinierten Typen

Referenz

Class-Anweisung (Visual Basic)

Interface-Anweisung (Visual Basic)

Module-Anweisung

Dim-Anweisung (Visual Basic)

Const-Anweisung (Visual Basic)

Enum-Anweisung (Visual Basic)

<languageKeyword>Event</languageKeyword>-Anweisung

Operator-Anweisung

Property-Anweisung