Istruzione Class (Visual Basic)

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

Sintassi

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _  
Class name [ ( Of typelist ) ]  
    [ Inherits classname ]  
    [ Implements interfacenames ]  
    [ statements ]  
End Class  

Parti

Termine Definizione
attributelist Facoltativo. Vedere Elenco 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 Ombre.
MustInherit Facoltativo. Vedere MustInherit.
NotInheritable Facoltativo. Vedere NotInheritable.
Partial Facoltativo. Indica una definizione parziale della classe. Vedere Parziale.
name Obbligatorio. Nome di questa classe. Vedere Declared Element Names.
Of Facoltativo. Specifica che si tratta di una classe generica.
typelist Obbligatorio se si usa la parola chiave Of. Elenco di parametri di tipo per questa classe. Vedere Elenco tipi.
Inherits Facoltativo. Indica che questa classe eredita i membri di un'altra classe. Vedere Istruzione Inherits.
classname Obbligatorio se si usa l'istruzione Inherits. Nome della classe da cui deriva questa classe.
Implements Facoltativo. Indica che questa classe 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 classe.
statements Facoltativo. Istruzioni che definiscono i membri di questa classe.
End Class Obbligatorio. Termina la definizione Class.

Osservazioni:

Un'istruzione Class definisce un nuovo tipo di dati. Una classe è un blocco predefinito fondamentale della programmazione orientata agli oggetti (OOP). Per altre informazioni, vedere Oggetti e classi.

Si può usare Class solo a livello di spazio dei nomi o modulo. Ciò significa che il contesto di dichiarazione per una classe 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.

Ogni istanza di una classe ha una durata indipendente da tutte le altre istanze. Questa durata inizia quando viene creata da una clausola New Operator o da una funzione, ad esempio CreateObject. Termina quando tutte le variabili che puntano all'istanza sono state impostate su Nothing o su istanze di altre classi.

Per impostazione predefinita, le classi hanno l'accesso Amico. È 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 classe all'interno di un'altra. La classe esterna è denominata classe contenitore e la classe interna è denominata classe annidata.

  • Ereditarietà. Se la classe usa l'istruzione Inherits, è possibile specificare una sola classe o interfaccia di base. Una classe non può ereditare da più di un elemento.

    Una classe non può ereditare da un'altra classe con un livello di accesso più restrittivo. Ad esempio, una classe Public non può ereditare da una classe Friend.

    Una classe non può ereditare da una classe annidata al suo interno.

  • Implementazione. Se la classe usa l'istruzione Implements, è necessario implementare ogni membro definito da ogni interfaccia specificata in interfacenames. Un'eccezione a ciò è la nuova implementazione di un membro della classe di base. Per altre informazioni, vedere "Reimplementazione" in Implementazioni.

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

Comportamento

  • Livello di accesso. All'interno di una classe, è possibile dichiarare ogni membro con il proprio livello di accesso. Per impostazione predefinita, i membri della classe sono ad accesso pubblico, ad eccezione di variabili e costanti, che per impostazione predefinita sono ad accesso Privato. Quando una classe ha accesso più limitato rispetto a uno dei relativi membri, il livello di accesso della classe ha la precedenza.

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

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

    Durata. Visual Basic non supporta classi statiche. L'equivalente funzionale di una classe statica viene fornito da un modulo. Per altre informazioni, vedere Istruzione Module.

    I membri della classe hanno durate basate su come e dove vengono dichiarati. Per altre informazioni, vedere Durata in Visual Basic.

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

    Se il codice all'interno di una classe annidata crea un riferimento non qualificato a un elemento di programmazione, Visual Basic cerca prima l'elemento nella classe nidificata, quindi nella classe contenitore e così via fino all'elemento contenitore più esterno.

Classi e moduli

Questi elementi presentano molte analogie, ma esistono anche alcune differenze importanti.

  • Terminologia. Le versioni precedenti di Visual Basic riconoscono due tipi di moduli: moduli di classe (file con estensione cls) e moduli standard (file con estensione bas). La versione corrente li chiama rispettivamente classi e moduli.

  • Membri condivisi. È possibile controllare se un membro di una classe è un membro condiviso o un membro dell'istanza.

  • Orientamento agli oggetti. Le classi sono orientate agli oggetti, ma i moduli non lo sono. È possibile creare una o più istanze di una classe. Per altre informazioni, vedere Oggetti e classi.

Esempio

Nell'esempio seguente viene utilizzata un'istruzione Class per definire una classe e diversi membri.

Class BankAccount
    Shared interestRate As Decimal
    Private accountBalance As Decimal
    Public holdOnAccount As Boolean = False

    Public ReadOnly Property Balance() As Decimal
        Get
            Return accountBalance
        End Get
    End Property

    Public Sub PostInterest()
        accountBalance = accountBalance * (1 + interestRate)
    End Sub

    Public Sub PostDeposit(ByVal amountIn As Decimal)
        accountBalance = accountBalance + amountIn
    End Sub

    Public Sub PostWithdrawal(ByVal amountOut As Decimal)
        accountBalance = accountBalance - amountOut
    End Sub
End Class

Vedi anche