Freigeben über


Structure-Anweisung

Deklariert den Namen einer Struktur und führt die Definition der Variablen, Eigenschaften, Ereignisse und Prozeduren ein, die die Struktur umfasst.

Syntax

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

Bestandteile

Begriff Definition
attributelist Wahlfrei. Siehe Attributliste.
accessmodifier Wahlfrei. Dabei kann es sich um eine der folgenden Methoden handeln:

- Öffentlich
- Geschützt
- Freund
- Privat
- Geschützter Freund
- Privat geschützt

Siehe Access-Ebenen in Visual Basic.
Shadows Wahlfrei. Siehe Schatten.
Partial Wahlfrei. Gibt eine partielle Definition der Struktur an. Siehe Teilweise.
name Erforderlich. Name dieser Struktur. Siehe deklarierte Elementnamen.
Of Wahlfrei. Gibt an, dass es sich um eine generische Struktur handelt.
typelist Erforderlich, wenn Sie das Schlüsselwort "Of" verwenden. Liste der Typparameter für diese Struktur. Siehe Typliste.
Implements Wahlfrei. 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 Schnittstellen, die diese Struktur implementiert.
datamemberdeclarations Erforderlich. Null oder mehr Const, Dim, Enum, oder Event Anweisungen deklarieren Datenmber der Struktur.
methodmemberdeclarations Wahlfrei. Null oder mehr Deklarationen von Function, , Operator, Propertyoder Sub Prozeduren, die als Methodenmmber der Struktur dienen.
End Structure Erforderlich. Beendet die Structure Definition.

Bemerkungen

Die Structure Anweisung definiert einen zusammengesetzten Werttyp, den Sie anpassen können. Eine Struktur ist eine Generalisierung des benutzerdefinierten Typs (UDT) früherer Versionen von Visual Basic. Weitere Informationen finden Sie unter "Strukturen".

Strukturen unterstützen viele der gleichen Features wie Klassen. Beispielsweise können Strukturen Eigenschaften und Prozeduren haben, sie können Schnittstellen implementieren und parametrisierte Konstruktoren haben. Es gibt jedoch erhebliche Unterschiede zwischen Strukturen und Klassen in Bereichen wie Vererbung, Deklarationen und Verwendung. Außerdem sind Klassen Referenztypen und Strukturen Werttypen. Weitere Informationen finden Sie unter "Strukturen und Klassen".

Sie können nur auf Namespace- oder Modulebene verwenden Structure . 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 keine Prozedur oder ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Strukturen werden standardmäßig für den Friend-Zugriff verwendet. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Weitere Informationen finden Sie unter Access-Ebenen in Visual Basic.

Regeln

  • Schachtelung. Sie können eine Struktur innerhalb einer anderen definieren. Die äußere Struktur wird als enthaltende Struktur bezeichnet, und die innere Struktur wird 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 des Datentyps der geschachtelten Struktur deklarieren.

  • Memberdeklaration. Sie müssen jedes Element einer Struktur deklarieren. Ein Strukturmember kann nicht geschützt werden oder Protected Friend weil nichts von einer Struktur erben kann. Die Struktur selbst kann jedoch sein Protected oder Protected Friend.

    Sie können null oder mehr nicht freigabefähige Variablen oder nicht teilene Ereignisse in einer Struktur deklarieren. Sie können nicht nur Konstanten, Eigenschaften und Prozeduren haben, auch wenn einige davon nicht teilen.

  • Initialisierung. Sie können den Wert eines nicht freigebenen Datenelements einer Struktur nicht als Teil der Deklaration initialisieren. Sie müssen ein solches Datenelement entweder mithilfe eines parametrisierten Konstruktors für die Struktur initialisieren oder dem Element einen Wert zuweisen, nachdem Sie eine Instanz der Struktur erstellt haben.

  • Erbschaft. Eine Struktur kann nicht von einem anderen ValueTypeTyp als , von dem alle Strukturen erben, erben. Insbesondere kann eine Struktur nicht von einer anderen erben.

    Sie können die Inherits-Anweisung nicht in einer Strukturdefinition verwenden, auch um anzugeben ValueType.

  • Implementierung. Wenn die Struktur die Implements-Anweisung verwendet, müssen Sie jedes Element implementieren, das von jeder Schnittstelle definiert wird, in interfacenamesder Sie angeben.

  • Default-Eigenschaft. Eine Struktur kann höchstens eine Eigenschaft als Standardeigenschaft mithilfe des Standardmodifizierers angeben. Weitere Informationen finden Sie unter "Standard".

Verhalten

  • Zugriffsebene. Innerhalb einer Struktur können Sie jedes Element mit einer eigenen Zugriffsebene deklarieren. Alle Strukturmber werden standardmäßig für den öffentlichen Zugriff verwendet. Beachten Sie: Wenn die Struktur selbst eine eingeschränktere Zugriffsstufe aufweist, wird dadurch automatisch der Zugriff auf seine Mitglieder eingeschränkt, auch wenn Sie deren Zugriffsebenen mit den Zugriffsmodifizierern anpassen.

  • Bereich. Eine Struktur befindet sich im Gesamten des zugehörigen Namespaces, der Klasse, der Struktur oder des Moduls.

    Der Umfang jedes Strukturelements ist die gesamte Struktur.

  • Lebensdauer. Eine Struktur selbst hat keine Lebensdauer. Vielmehr verfügt jede Instanz dieser Struktur über eine Lebensdauer unabhängig von allen anderen Instanzen.

    Die Lebensdauer einer Instanz beginnt, wenn sie von einer New Operator-Klausel erstellt wird. Sie endet, wenn die Lebensdauer der Variablen, die sie enthält, endet.

    Sie können die Lebensdauer einer Strukturinstanz nicht verlängern. Eine Annäherung an statische Strukturfunktionen wird von einem Modul bereitgestellt. Weitere Informationen finden Sie unter Module-Anweisung.

    Strukturmber haben Lebensdauern, je nachdem, wie und wo sie deklariert werden. Weitere Informationen finden Sie unter "Lifetime" in Class Statement.

  • Qualifikation. Code außerhalb einer Struktur muss den Namen eines Elements mit dem Namen dieser Struktur qualifizieren.

    Wenn Code innerhalb einer geschachtelten Struktur einen nicht qualifizierten Verweis auf ein Programmierelement macht, sucht Visual Basic zuerst in der geschachtelten Struktur nach dem Element, dann in seiner enthaltenden Struktur usw. auf das äußerste enthaltende Element. Weitere Informationen finden Sie unter Verweise auf deklarierte Elemente.

  • Arbeitsspeicherverbrauch. Wie bei allen zusammengesetzten Datentypen können Sie den gesamtspeicherverbrauch einer Struktur nicht sicher berechnen, indem Sie die nominalen Speicherzuordnungen ihrer Member hinzufügen. Darüber hinaus können Sie nicht sicher davon ausgehen, dass die Reihenfolge des Speichers im Arbeitsspeicher mit Ihrer Deklarationsreihenfolge identisch ist. 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 verwendet, um einen Satz verwandter Daten für einen Mitarbeiter zu definieren. Es zeigt die Verwendung von Public, Friendund Private Member, um die Vertraulichkeit der Datenelemente widerzuspiegeln. Außerdem werden Prozedur-, Eigenschafts- und Ereignismmber angezeigt.

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