Structure Statement

Deklariert den Namen einer Struktur und führt die Definitionen der Variablen, Eigenschaften, Ereignisse und Prozeduren ein, aus denen die Struktur besteht.

Syntax

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

Bestandteile

Begriff Definition
attributelist Dies ist optional. Siehe Attributliste.
accessmodifier Optional. Dabei kann es sich um eine der folgenden Methoden handeln:

- Public
- Protected
- Friend
- Privat
- Protected Friend
- Private Protected

Siehe Access levels in Visual Basic.
Shadows Optional. Siehe Shadows.
Partial Optional. Gibt eine partielle Definition der Struktur an. Siehe Teilweise.
name Erforderlich. Name der Struktur. Siehe Declared Element Names.
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. Null oder mehrere Const-, Dim-, Enum- oder Event-Anweisungen, die Datenmember der Struktur deklarieren.
methodmemberdeclarations Optional. Null oder mehr Deklarationen der Function-, Operator-, Property-oder Sub-Prozeduren, die als Methodenmember der Struktur fungieren.
End Structure Erforderlich. Beendet die Structure-Definition.

Bemerkungen

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.

Strukturen unterstützen viele Funktionen, 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, Deklarationen 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. 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 können in einer Struktur null oder mehr nicht freigegebene Variablen oder nicht freigegebene nicht benutzerdefinierte Ereignisse 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 als Teil 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 von der Struktur die Implements-Anweisung verwendet wird, müssen Sie alle Member implementieren, die durch die einzelnen in interfacenames angegebenen Schnittstellen definiert sind.

  • Standardeigenschaft. Für eine Struktur kann höchstens eine Eigenschaft als Standardeigenschaft angegeben werden. Verwenden Sie hierzu den Standard-Modifizierer. Weitere Informationen finden Sie unter Standard.

Verhalten

  • Zugriffsebene. In einer Struktur können Sie jeden Member mit einer eigenen Zugriffsebene deklarieren. Der Standardzugriff für alle Strukturmember ist Public. 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.

  • Umfang. 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.

  • Lifetime (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 die Klausel New-Operator. Sie endet, wenn die enthaltende Lebensdauer der Variablen endet.

    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 Modulanweisung.

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

  • Qualifikation. 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, wird von Visual Basic das Element zunächst in der geschachtelten Struktur gesucht, anschließend in der enthaltenden Struktur und so weiter bis zum äußersten enthaltenden Element. Weitere Informationen finden Sie unter References to Declared Elements.

  • Speicherverbrauch. Wie bei allen zusammengesetzten Datentypen können Sie den gesamten Speicherverbrauch auch bei Strukturen nicht dadurch zuverlässig berechnen, indem Sie die nominalen Speicherbelegungen ihrer Member addieren. 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 anzugeben. 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

Weitere Informationen zur Verwendung von Structures finden Sie unter Strukturvariable.

Siehe auch