Dichiarazione di variabili oggetto (Visual Basic)
Si usa un'istruzione di dichiarazione normale per dichiarare una variabile oggetto. Per il tipo di dati, è necessario specificare Object
, ovvero il tipo di dati object, o una classe più specifica da cui creare l'oggetto.
Dichiarando una variabile come Object
è uguale a dichiararla come System.Object.
Quando si dichiara una variabile con una classe oggetto specifica, è possibile accedere a tutti i metodi e le proprietà esposte da tale classe e dalle classi da cui eredita. Se si dichiara la variabile con Object, può accedere solo ai membri della classe, a meno che non si turni Option Strict Off
per consentire l'associazione Object tardiva.
Sintassi di dichiarazione
Usare la sintassi seguente per dichiarare una variabile oggetto:
Dim variablename As [New] { objectclass | Object }
È anche possibile specificare Public, Protected, Friend, Protected Friend
,Private, Shared o Static nella dichiarazione. Le dichiarazioni di esempio seguenti sono valide:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Associazione tardiva e associazione anticipata
A volte la classe specifica non è sconosciuta fino all'esecuzione del codice. In questo caso, è necessario dichiarare la variabile oggetto con il Object
tipo di dati. In questo modo viene creato un riferimento generale a qualsiasi tipo di oggetto e la classe specifica viene assegnata in fase di esecuzione. Questo è chiamato binding tardivo. L'associazione tardiva richiede tempo di esecuzione aggiuntivo. Limita anche il codice ai metodi e alle proprietà della classe assegnata più di recente. Ciò può causare errori di runtime se il codice tenta di accedere ai membri di una classe diversa.
Quando si conosce la classe specifica in fase di compilazione, è necessario dichiarare che la variabile oggetto deve essere di tale classe. Questa operazione è definita associazione anticipata. L'associazione anticipata migliora le prestazioni e garantisce l'accesso al codice a tutti i metodi e alle proprietà della classe specifica. Nelle dichiarazioni di esempio precedenti, se la variabile objA
usa solo oggetti di classe System.Windows.Forms.Label, è necessario specificare As System.Windows.Forms.Label
nella relativa dichiarazione.
Vantaggi offerti dall'associazione anticipata
La dichiarazione di una variabile di oggetto come classe specifica offre diversi vantaggi:
Controllo automatico dei tipi
Accesso garantito a tutti i membri della classe specifica
Supporto di Microsoft IntelliSense nell'editor di codice
Miglioramento della leggibilità del codice
Meno errori nel codice
Errori rilevati in fase di compilazione anziché tempo di esecuzione
Esecuzione più rapida del codice
Accesso ai membri della variabile oggetto
Quando Option Strict
viene trasformato On
, una variabile oggetto può accedere solo ai metodi e alle proprietà della classe con cui viene dichiarata. Questa condizione è illustrata nell'esempio seguente.
' 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ò usare solo i membri della classe Object stessa, che non includono la proprietà Left
. D'altra parte, q
è stata dichiarata con il tipo Label, perciò può usare tutti i metodi e le proprietà della classe Label nello spazio dei nomi System.Windows.Forms .
Flessibilità delle variabili oggetto
Quando si utilizzano oggetti in una gerarchia di ereditarietà, è possibile scegliere quale classe usare per dichiarare le variabili dell'oggetto. In questa scelta è necessario bilanciare la flessibilità dell'assegnazione di oggetti rispetto all'accesso ai membri di una classe. Si consideri ad esempio la gerarchia di ereditarietà che porta alla System.Windows.Forms.Form classe:
Si supponga che l'applicazione definisca una classe di modulo denominata specialForm
, che eredita dalla classe Form. È possibile dichiarare una variabile oggetto che fa riferimento specificamente a specialForm
, come illustrato nell'esempio seguente.
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 disponibili nextForm
tutti i metodi e le proprietà di specialForm
, nonché tutti i membri di tutte le classi da cui specialForm
eredita.
È possibile creare una variabile oggetto più generale dichiarandola come di tipo Form, come illustrato nell'esempio seguente.
Dim anyForm As System.Windows.Forms.Form
La dichiarazione nell'esempio precedente consente di assegnare qualsiasi modulo nell'applicazione a anyForm
. Tuttavia, anche se anyForm
può accedere a tutti i membri della classe Form, non può usare uno dei metodi o delle proprietà aggiuntivi definiti per moduli specifici, specialForm
ad esempio .
Tutti i membri di una classe di base sono disponibili per le classi derivate, ma i membri aggiuntivi di una classe derivata non sono disponibili per la classe base.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per