Struktursats

Deklarerar namnet på en struktur och introducerar definitionen av variabler, egenskaper, händelser och procedurer som strukturen består av.

Syntax

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

Delar

Period Definition
attributelist Valfritt. Se Attributlista.
accessmodifier Valfritt. Kan vara något av följande:

- Offentliga
- Skyddade
- Vän
- Privat
- Skyddad vän
- Privat skyddad

Se Åtkomstnivåer i Visual Basic.
Shadows Valfritt. Se Skuggor.
Partial Valfritt. Anger en partiell definition av strukturen. Se Partiell.
name Obligatoriska. Namnet på den här strukturen. Se Deklarerade elementnamn.
Of Valfritt. Anger att detta är en allmän struktur.
typelist Krävs om du använder nyckelordet Av . Lista över typparametrar för den här strukturen. Se Typlista.
Implements Valfritt. Anger att den här strukturen implementerar medlemmarna i ett eller flera gränssnitt. Se Implementeringsinstruktor.
interfacenames Krävs om du använder -instruktionen Implements . Namnen på de gränssnitt som den här strukturen implementerar.
datamemberdeclarations Obligatoriska. Noll eller fler Const, Dim, Enumeller Event instruktioner som deklarerar datamedlemmar i strukturen.
methodmemberdeclarations Valfritt. Noll eller fler deklarationer av Function, Operator, Propertyeller Sub procedurer, som fungerar som metodmedlemmar i strukturen.
End Structure Obligatoriska. Structure Avslutar definitionen.

Kommentarer

Instruktionen Structure definierar en sammansatt värdetyp som du kan anpassa. En struktur är en generalisering av den användardefinierade typen (UDT) av tidigare versioner av Visual Basic. Mer information finns i Strukturer.

Strukturer stöder många av samma funktioner som klasser. Strukturer kan till exempel ha egenskaper och procedurer, de kan implementera gränssnitt och ha parametriserade konstruktorer. Det finns dock betydande skillnader mellan strukturer och klasser inom områden som arv, deklarationer och användning. Klasser är också referenstyper och strukturer är värdetyper. Mer information finns i Strukturer och klasser.

Du kan bara använda Structure på namnområdes- eller modulnivå. Det innebär att deklarationskontexten för en struktur måste vara en källfil, namnrymd, klass, struktur, modul eller gränssnitt och kan inte vara en procedur eller ett block. Mer information finns i Deklarationskontexter och standardåtkomstnivåer.

Strukturer som standard för vänåtkomst . Du kan justera deras åtkomstnivåer med åtkomstmodifierarna. Mer information finns i Åtkomstnivåer i Visual Basic.

Regler

  • Häckande. Du kan definiera en struktur i en annan. Den yttre strukturen kallas för den innehållande strukturen och den inre strukturen kallas för en kapslad struktur. Du kan dock inte komma åt medlemmar i en kapslad struktur via den innehållande strukturen. I stället måste du deklarera en variabel för den kapslade strukturens datatyp.

  • Medlemsdeklaration. Du måste deklarera varje medlem i en struktur. En strukturmedlem kan inte skyddas eller Protected Friend eftersom ingenting kan ärva från en struktur. Själva strukturen kan dock vara Protected eller Protected Friend.

    Du kan deklarera noll eller fler icke-delade variabler eller icke-delade, icke-anpassade händelser i en struktur. Du kan inte bara ha konstanter, egenskaper och procedurer, även om vissa av dem inte delas.

  • Initiering. Du kan inte initiera värdet för någon icke-delad datamedlem i en struktur som en del av deklarationen. Du måste antingen initiera en sådan datamedlem med hjälp av en parameteriserad konstruktor i strukturen eller tilldela ett värde till medlemmen när du har skapat en instans av strukturen.

  • Arv. En struktur kan inte ärva från någon annan typ än ValueType, från vilken alla strukturer ärver. I synnerhet kan en struktur inte ärva från en annan.

    Du kan inte använda instruktionen Inherits i en strukturdefinition, inte ens för att ange ValueType.

  • Genomförandet. Om strukturen använder Implements-instruktionen måste du implementera varje medlem som definierats av varje gränssnitt som du anger i interfacenames.

  • Standardegenskap. En struktur kan ange högst en egenskap som standardegenskap med hjälp av standardmodifieraren. Mer information finns i Standard.

Funktionssätt

  • Åtkomstnivå. I en struktur kan du deklarera varje medlem med sin egen åtkomstnivå. Alla strukturmedlemmar är standard för offentlig åtkomst. Observera att om själva strukturen har en mer begränsad åtkomstnivå begränsar detta automatiskt åtkomsten till dess medlemmar, även om du justerar deras åtkomstnivåer med åtkomstmodifierarna.

  • Omfattning. En struktur finns i omfånget i dess innehållande namnrymd, klass, struktur eller modul.

    Omfånget för varje strukturmedlem är hela strukturen.

  • Livslängd. En struktur har inte en livslängd. I stället har varje instans av den strukturen en livslängd som är oberoende av alla andra instanser.

    Livslängden för en instans börjar när den skapas av en ny operator-sats . Den slutar när livslängden för variabeln som innehåller den slutar.

    Du kan inte förlänga livslängden för en strukturinstans. En uppskattning av funktionen för statisk struktur tillhandahålls av en modul. Mer information finns i Modulöversikt.

    Strukturmedlemmar har livslängd beroende på hur och var de deklareras. Mer information finns i "Livslängd" i klassuttryck.

  • Kvalifikationer. Kod utanför en struktur måste kvalificera en medlems namn med namnet på den strukturen.

    Om kod i en kapslad struktur gör en okvalificerad referens till ett programmeringselement söker Visual Basic efter elementet först i den kapslade strukturen, sedan i dess innehållande struktur och så vidare ut till det yttersta elementet som innehåller elementet. Mer information finns i Referenser till deklarerade element.

  • Minnesförbrukning. Som med alla sammansatta datatyper kan du inte på ett säkert sätt beräkna den totala minnesförbrukningen för en struktur genom att lägga ihop de nominella lagringsallokeringarna för dess medlemmar. Dessutom kan du inte på ett säkert sätt anta att lagringsordningen i minnet är samma som din deklarationsordning. Om du behöver styra lagringslayouten för en struktur kan du använda StructLayoutAttribute attributet för -instruktionen Structure .

Exempel

I följande exempel används -instruktionen Structure för att definiera en uppsättning relaterade data för en anställd. Den visar användningen av Public, Friendoch Private medlemmar för att återspegla dataobjektens känslighet. Den visar även procedur-, egenskaps- och händelsemedlemmar.

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

Mer information om hur du använder Structures finns i Strukturvariabel.

Se även