Condividi tramite


Dichiarazione di variabili oggetto

Aggiornamento: novembre 2007

Per dichiarare una variabile oggetto è possibile utilizzare una normale istruzione di dichiarazione. Per il tipo di dati è necessario specificare Object (ovvero il Tipo di dati Object) o una classe più specifica dalla quale deve essere creato l'oggetto.

La dichiarazione di una variabile come Object equivale alla dichiarazione della stessa come System.Object.

Quando viene dichiarata con una classe oggetto specifica, una variabile può accedere a tutti i metodi e le proprietà esposti da tale classe e dalle classi da cui eredita. Se viene dichiarata con Object, la variabile potrà accedere soltanto ai membri della classe Object, a meno che non si imposti Option Strict Off per consentire l'associazione tardiva.

Sintassi di dichiarazione

Per dichiarare una variabile oggetto, utilizzare la sintassi seguente:

Dim variablename As [New] { objectclass | Object }

Nella dichiarazione è anche possibile specificare Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend, Private (Visual Basic), Shared (Visual Basic) o Static (Visual Basic). Le seguenti dichiarazioni di esempio sono valide:

Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem

Associazione tardiva e associazione anticipata

Talvolta la classe specifica è sconosciuta fino all'esecuzione del codice. In questo caso, è necessario dichiarare la variabile oggetto con il tipo di dati Object. In questo modo viene creato un riferimento generale a un tipo qualsiasi di oggetto e la classe specifica viene assegnata in fase di esecuzione. Questa operazione è detta associazione tardiva. L'associazione tardiva richiede un tempo di esecuzione maggiore e consente di utilizzare nel codice soltanto i metodi e le proprietà dell'ultima classe assegnata. Se viene effettuato un tentativo di accesso ai membri di una classe diversa, è possibile che si verifichino errori di run-time.

Quando la classe specifica è nota in fase di compilazione, è preferibile dichiarare la variabile oggetto come appartenente a tale classe. Questa operazione è detta associazione anticipata. L'associazione anticipata consente di migliorare le prestazioni e consente l'accesso del codice a tutti i metodi e le proprietà della classe specifica. Nelle dichiarazioni di esempio precedenti, se la variabile objA utilizza soltanto oggetti della classe System.Windows.Forms.Label, è necessario specificare As System.Windows.Forms.Label nella relativa dichiarazione.

Vantaggi dell'associazione anticipata

La dichiarazione di una variabile oggetto come classe specifica offre diversi vantaggi:

  • Controllo automatico dei tipi

  • Accesso garantito a tutti i membri della classe specifica

  • Supporto Microsoft IntelliSense nell'editor di codice

  • Migliore leggibilità del codice

  • Minore numero di errori nel codice

  • Rilevazione degli errori in fase di compilazione anziché in fase di esecuzione

  • Esecuzione più rapida del codice

Accesso ai membri delle variabili oggetto

Quando Option Strict è impostata su On, una variabile oggetto può accedere soltanto ai metodi e alle proprietà della classe con la quale è stata dichiarata. Questa condizione è illustrata nell'esempio che segue.

' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
    Dim p As Object
    Dim q As System.Windows.Forms.Label
    p = New System.Windows.Forms.Label
    q = New System.Windows.Forms.Label
    Dim j, k As Integer
    ' The following statement generates a compiler ERROR.
    j = p.Left
    ' The following statement retrieves the left edge of the label in pixels.
    k = q.Left
End Sub

In questo esempio, p può utilizzare soltanto i membri della classe Object, che non includono la proprietà Left. D'altra parte, la variabile q è stata dichiarata di tipo Label e può quindi utilizzare tutti i metodi e le proprietà della classe Label nello spazio dei nomi System.Windows.Forms.

Flessibilità delle variabili oggetto

Quando si utilizzano gli oggetti in una gerarchia di ereditarietà, è possibile scegliere la classe da utilizzare per dichiarare le variabili oggetto. Nell'effettuare la scelta, è necessario bilanciare la flessibilità dell'assegnazione all'oggetto e l'accesso ai membri di una classe. Si consideri, ad esempio, la gerarchia di ereditarietà che rimanda alla classe System.Windows.Forms.Form:

Object

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Si supponga che l'applicazione definisca una classe di form denominata specialForm, che eredita dalla classe Form. È possibile dichiarare una variabile oggetto che faccia riferimento in modo specifico a specialForm, come illustrato nel seguente esempio.

Public Class specialForm
    Inherits System.Windows.Forms.Form
    ' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm

La dichiarazione nell'esempio precedente limita la variabile nextForm agli oggetti della classe specialForm, ma rende anche tutti i metodi e le proprietà della classe specialForm disponibili per nextForm e per tutti i membri di tutte le classi dalle quali specialForm eredita.

È possibile rendere più generale una variabile oggetto dichiarandola di tipo Form, come illustrato di seguito.

Dim anyForm As System.Windows.Forms.Form

La dichiarazione nell'esempio precedente consente di assegnare a anyForm un qualsiasi form presente nell'applicazione. Tuttavia, sebbene possa accedere a tutti i membri della classe Form, anyForm non può utilizzare le proprietà o i metodi aggiuntivi definiti per form specifici, ad esempio specialForm.

Tutti i membri di una classe base sono disponibili per le classi derivate, ma i membri aggiuntivi di una classe derivata non sono disponibili per la classe base.

Vedere anche

Attività

Procedura: dichiarare una variabile oggetto e assegnarle un oggetto in Visual Basic

Procedura: accedere ai membri di un oggetto

Concetti

Variabili oggetto in Visual Basic

Assegnazione di variabili oggetto

Valori di variabili oggetto

Programmazione senza tipi in Visual Basic

Inferenza dei tipi locali

Riferimenti

New (Visual Basic)

Istruzione Option Strict