Istruzione Structure

Dichiara il nome di una struttura e introduce la definizione delle variabili, delle proprietà, degli eventi e delle procedure incluse nella struttura.

Sintassi

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

Parti

Termine Definizione
attributelist Facoltativo. Vedere Elenco degli attributi.
accessmodifier Facoltativo. Può essere uno dei seguenti:

- Pubblica
- Protected
- Friend
- Privata
- Protected Friend
- Private Protected

Vedere Access levels in Visual Basic.
Shadows Facoltativo. Vedere Shadows.
Partial Facoltativo. Indica una definizione parziale della struttura. Vedere Parziale.
name Obbligatorio. Nome di questa struttura. Vedere Declared Element Names.
Of Facoltativo. Specifica che si tratta di una struttura generica.
typelist Obbligatorio se si usa la parola chiave Of. Elenco di parametri di tipo per questa struttura. Vedere Elenco tipi.
Implements Facoltativo. Indica che questa struttura implementa i membri di una o più interfacce. Vedere Istruzione Implements.
interfacenames Obbligatorio se si usa l'istruzione Implements. Nomi delle interfacce implementate da questa struttura.
datamemberdeclarations Obbligatorio. Zero o più istruzioni Const, Dim, Enum o Event che dichiarano membri dati della struttura.
methodmemberdeclarations Facoltativo. Zero o più dichiarazioni di routine Function, Operator, Property o Sub che fungono da membri del metodo della struttura.
End Structure Obbligatorio. Termina la definizione Structure.

Osservazioni:

L'istruzione Structure definisce un tipo di valore composito che è possibile personalizzare. Una struttura è una generalizzazione del tipo definito dall'utente (UDT) delle versioni precedenti di Visual Basic. Per altre informazioni, vedere Strutture.

Le strutture supportano molte delle stesse funzionalità delle classi. Ad esempio, le strutture possono avere proprietà e procedure, possono implementare interfacce e possono avere costruttori con parametri. Esistono tuttavia delle differenze significative tra strutture e classi in aree quali l’ereditarietà, le dichiarazioni e l’utilizzo. Inoltre, le classi sono tipi di riferimento, mentre le strutture sono tipi valore. Per altre informazioni, vedere Strutture e classi.

Si può usare Structure solo a livello di spazio dei nomi o modulo. Ciò significa che il contesto di dichiarazione per una struttura deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un modulo o un'interfaccia e non può essere una routine o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.

Per impostazione predefinita, le strutture hanno accesso Friend. È possibile regolare i livelli di accesso con i modificatori di accesso. Per ulteriori informazioni, vedere Livelli di accesso in Visual Basic.

Regole

  • Annidamento. È possibile definire una struttura all'interno di un'altra. La struttura esterna è denominata struttura contenitore e la struttura interna è detta struttura nidificata. Tuttavia, non è possibile accedere ai membri di una struttura annidata tramite la struttura contenitore. È invece necessario dichiarare una variabile del tipo di dati della struttura annidata.

  • Dichiarazione membro. È necessario dichiarare ogni membro di una struttura. Un membro della struttura non può essere Protected o Protected Friend perché nulla può ereditare da una struttura. La struttura stessa, tuttavia, può essere Protected o Protected Friend.

    È possibile dichiarare zero o più variabili non condivise oppure eventi non condivisi o non personalizzati in una struttura. Non è possibile avere solo costanti, proprietà e procedure, anche se alcune di esse non sono condivise.

  • Inizializzazione. Non è possibile inizializzare il valore di un membro dati non condiviso di una struttura come parte della relativa dichiarazione. È necessario inizializzare tale membro dati tramite un costruttore con parametri nella struttura oppure assegnare un valore al membro dopo aver creato un'istanza della struttura.

  • Ereditarietà. Una struttura non può ereditare da qualsiasi tipo diverso da ValueType, da cui ereditano tutte le strutture. In particolare, una struttura non può ereditare da un'altra.

    Non è possibile utilizzare l'istruzione Inherits in una definizione di struttura, anche per specificare ValueType.

  • Implementazione. Se la struttura usa l'istruzione Implements, è necessario implementare ogni membro definito da ogni interfaccia specificata in interfacenames.

  • Proprietà predefinita. Una struttura può specificare al massimo una proprietà come proprietà predefinita, usando il modificatore Valore predefinito. Per altre informazioni, vedere Valore predefinito.

Comportamento

  • Livello di accesso. All'interno di una struttura, è possibile dichiarare ogni membro con il proprio livello di accesso. Per impostazione predefinita, tutti i membri della struttura sono ad accesso pubblico. Si noti che se la struttura stessa ha un livello di accesso più limitato, questo limita automaticamente l'accesso ai relativi membri, anche se si modificano i livelli di accesso con i modificatori di accesso.

  • Ambito. Una struttura è nell'ambito in tutto lo spazio dei nomi, la classe, la struttura o il modulo che la contiene.

    L'ambito di ogni membro della struttura è l'intera struttura.

  • Durata. Una struttura non ha una durata. Invece, ogni istanza di tale struttura ha una durata indipendente da tutte le altre istanze.

    La durata di un'istanza inizia quando viene creata da una clausola Nuovo Operatore. Termina quando termina la durata della variabile che lo contiene.

    Non è possibile estendere la durata di un'istanza della struttura. Un'approssimazione della funzionalità della struttura statica viene fornita da un modulo. Per altre informazioni, vedere Istruzione Module.

    I membri della struttura hanno durate a seconda di come e dove vengono dichiarati. Per altre informazioni, vedere "Lifetime" nell'Istruzione class.

  • Qualificazione. Il codice esterno a una struttura deve qualificare il nome di un membro con il nome di tale struttura.

    Se il codice all'interno di una struttura annidata crea un riferimento non qualificato a un elemento di programmazione, Visual Basic cerca prima l'elemento nella struttura nidificata, quindi nella struttura contenitore e così via fino all'elemento contenitore più esterno. Per altre informazioni, vedere References to Declared Elements.

  • Consumo di memoria. Come per tutti i tipi di dati compositi, non è possibile calcolare in modo sicuro il consumo totale di memoria di una struttura sommando le allocazioni di archiviazione nominale dei relativi membri. Non è inoltre possibile presupporre in modo sicuro che l'ordine di archiviazione in memoria corrisponda all'ordine di dichiarazione. Se è necessario controllare il layout di archiviazione di una struttura, è possibile applicare l'attributo StructLayoutAttribute all'istruzione Structure.

Esempio

Nell'esempio seguente viene utilizzata l'istruzione Structure per definire un set di dati correlati per un dipendente. Mostra l'uso di membri Public, Friend e Private per riflettere la riservatezza degli elementi di dati. Vengono inoltre visualizzati membri di routine, proprietà ed eventi.

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

Per altre informazioni su come usare Structures, vedere Variabile struttura.

Vedi anche