Istruzione Structure

Aggiornamento: novembre 2007

Consente di dichiarare il nome di una struttura e introduce la definizione di variabili, proprietà, eventi e routine comprese dalla struttura.

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

Parti

  • attributelist
    Facoltativo. Vedere Elenco degli attributi.

  • accessmodifier
    Facoltativo. ad esempio uno dei seguenti:

    Per informazioni, vedere Livelli di accesso in Visual Basic.

  • Shadows
    Facoltativo. Vedere Shadows |

  • Partial
    Facoltativo. Indica una definizione parziale della struttura. Per informazioni, vedere Partial (Visual Basic).

  • name
    Obbligatorio. Nome di questa struttura. Per informazioni, vedere Nomi di elementi dichiarati.

  • Of
    Facoltativo. Specifica che si tratta di una struttura generica.

  • typelist
    Obbligatoria se si utilizza la parola chiave Of. Elenco di parametri di tipo per la struttura. Vedere Elenco dei tipi.

  • Implements
    Facoltativo. Indica che la struttura consente di implementare i membri di una o più interfacce. Per informazioni, vedere Istruzione Implements.

  • interfacenames
    Obbligatoria se si utilizza l'istruzione Implements. Nomi delle interfacce implementate dalla struttura.

  • datamemberdeclarations
    Obbligatorio. Una o più istruzioni Const, Dim, Enum o Event che dichiarano i membri dati della struttura.

  • methodmemberdeclarations
    Facoltativo. Nessuna o più dichiarazioni di routine Function, Operator, Property o Sub che fungono da membri di metodo della struttura.

  • End Structure
    Obbligatorio. Consente di terminare la definizione Structure.

Note

L'istruzione Structure definisce un tipo di valore composto personalizzabile. Una struttura rappresenta una generalizzazione del tipo definito dall'utente (UDT, User-Defined Type) supportato dalle precedenti versioni di Visual Basic. Per ulteriori informazioni, vedere Strutture: tipi di dati dell'utente.

Le strutture supportano molte delle funzionalità supportate dalle classi. Le strutture che ad esempio possono contenere proprietà e routine, sono in grado di implementare interfacce e possono disporre di costruttori parametrizzati. Le differenze tra strutture e classi sono tuttavia significative a livello di ereditarietà, dichiarazione e utilizzo. Inoltre le classi sono tipi di riferimenti mentre le strutture sono tipi di valori. Per ulteriori informazioni, vedere Strutture e classi.

È possibile utilizzare Structure solo a livello di modulo o di spazio dei nomi. Il altri termini, il contesto della dichiarazione per una struttura deve essere costituito di un file di origine, uno spazio dei nomi, una classe, una struttura, un modulo o un'interfaccia, ma non una routine o un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefinito.

L'impostazione predefinita della struttura è l'accesso Friend (Visual Basic). È possibile modificarne i livelli di accesso mediante gli appositi modificatori. Per ulteriori informazioni, vedere Livelli di accesso in Visual Basic.

Regole

  • Nidificazione. È possibile definire una struttura all'interno di un altra. La struttura esterna viene definita struttura contenente, mentre la struttura interna viene definita struttura nidificata. Attraverso la struttura contenente non è tuttavia possibile accedere ai membri di una struttura nidificata. È invece necessario dichiarare una variabile del tipo di dati della struttura nidificata.

  • Dichiarazione di membro. È necessario dichiarare tutti i membri di una struttura. Un membro di struttura non può essere Protected o Protected Friend in quanto la struttura non prevede ereditarietà. La struttura stessa tuttavia, può essere Protected o Protected Friend.

    È necessario dichiarare almeno una variabile non condivisa o un evento non condiviso, non personalizzato in una struttura. Non è possibile che siano presenti solo costanti, proprietà e routine, anche se alcune di esse sono di tipo non condiviso.

  • Inizializzazione. Non è possibile inizializzare il valore di un membro dati non condiviso di una struttura nell'ambito della relativa dichiarazione. È invece necessario che tale membro dati venga inizializzato per mezzo di un costruttore con parametri nella struttura oppure che gli venga assegnato un valore dopo la creazione di un'istanza della struttura.

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

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

  • Implementazione. Se la struttura utilizza l'Istruzione Implements, è necessario implementare ogni membro definito da ogni interfaccia specificata nei interfacenames.

  • Proprietà predefinita. Una struttura è in grado di specificare al massimo una proprietà come sua proprietà predefinita, utilizzando il modificatore Default (Visual Basic). Per ulteriori informazioni, vedere Proprietà predefinite.

Comportamento

  • Livello di accesso. All'interno di una struttura è possibile dichiarare ogni membro con il suo livello di accesso personale. L'impostazione predefinita dei membri della struttura è l'accesso Public (Visual Basic). Si noti che se la struttura stessa ha un livello di accesso più ristretto, questo restringe automaticamente l'accesso ai suoi membri, anche se si regolano i livelli di accesso dei membri con i modificatori di accesso.

  • Ambito. Una struttura si trova nell'area di validità tramite lo spazio dei nomi, la classe, la struttura o il modulo che la contiene.

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

  • Durata. Una struttura non dispone di una propria durata, ma ogni istanza di quella struttura dispone di una durata indipendente da tutte le altre.

    La durata di un'istanza comincia quando viene creata da una clausola New (Visual Basic). e termina quando termina la durata della variabile che la contiene.

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

    La durata dei membri della struttura dipende da come e dove sono stati dichiarati. Per ulteriori informazioni, vedere "Durata" in Istruzione Class (Visual Basic).

  • Qualificazione. È necessario che il codice all'esterno di una struttura qualifichi un nome del membro con il nome di tale struttura.

    Se il codice all'interno di una struttura nidificata fa un riferimento non completo a un elemento di programmazione, l'elemento verrà innanzitutto cercato nella struttura nidificata, quindi nella sua struttura contenente e via di seguito fino all'elemento contenente più esterno. Per ulteriori informazioni, vedere Risoluzione di un riferimento quando più variabili hanno lo stesso nome.

  • Consumo di memoria. Come nel caso di tutti i tipi di dati compositi, il calcolo del consumo di memoria totale di una struttura in base alla somma delle allocazioni di memoria nominali dei relativi membri presenta alcuni rischi. Non è inoltre possibile supporre con certezza che l'ordine di archiviazione in memoria corrisponda esattamente 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 l'istruzione Structure viene utilizzata per definire un insieme di dati correlati per un dipendente. Viene illustrato l'utilizzo di membri Public, Friend e Private per riflettere la riservatezza degli elementi di dati. Vengono inoltre illustrati 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

Vedere anche

Attività

Procedura: convertire un tipo definito dall'utente in una struttura di Visual Basic

Concetti

Strutture e classi

Raccomandazioni sull'aggiornamento: evitare l'impiego di matrici e di stringhe a lunghezza fissa in tipi definiti dall'utente

Riferimenti

Istruzione Class (Visual Basic)

Istruzione Interface (Visual Basic)

Istruzione Module

Istruzione Dim (Visual Basic)

Istruzione Const (Visual Basic)

Istruzione Enum (Visual Basic)

Istruzione Event

Istruzione Operator

Istruzione Property