Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un oggetto è una combinazione di codice e dati che possono essere considerati come un'unità. Un oggetto può essere una parte di un'applicazione, ad esempio un controllo o una maschera. Un'intera applicazione può anche essere un oggetto .
Quando si crea un'applicazione in Visual Basic, si lavora costantemente con gli oggetti . È possibile utilizzare oggetti forniti da Visual Basic, ad esempio controlli, moduli e oggetti di accesso ai dati. È anche possibile usare oggetti di altre applicazioni all'interno dell'applicazione Visual Basic. È anche possibile creare oggetti personalizzati e definire proprietà e metodi aggiuntivi per tali oggetti. Gli oggetti agiscono come blocchi predefiniti prefabricati per i programmi, che consentono di scrivere un frammento di codice una volta e riutilizzarlo più volte.
In questo argomento vengono illustrati in dettaglio gli oggetti .
Oggetti e classi
Ogni oggetto in Visual Basic è definito da una classe . Una classe descrive le variabili, le proprietà, le routine e gli eventi di un oggetto . Gli oggetti sono istanze di classi; è possibile creare tutti gli oggetti necessari dopo aver definito una classe.
Per comprendere la relazione tra un oggetto e la sua classe, pensa agli tagliabiscotti e ai biscotti. Lo stampo per biscotti è la classe. Definisce le caratteristiche di ogni cookie, ad esempio dimensioni e forma. La classe viene utilizzata per creare oggetti. Gli oggetti sono i cookie.
È necessario creare un oggetto prima di poter accedere ai relativi membri, ad eccezione Shared
dei membri a cui è possibile accedere senza un oggetto della classe .
Creare un oggetto da una classe
Determinare da quale classe si vuole creare un oggetto o definire la propria classe. Per esempio:
Public Class Customer Public Property AccountNumber As Integer End Class
Scrivere un'istruzione Dim per creare una variabile a cui è possibile assegnare un'istanza di classe. La variabile deve essere del tipo della classe desiderata.
Dim nextCustomer As Customer
Aggiungere la parola chiave New Operator per inizializzare la variabile in una nuova istanza della classe .
Dim nextCustomer As New Customer
È ora possibile accedere ai membri della classe tramite la variabile dell'oggetto.
nextCustomer.AccountNumber = lastAccountNumber + 1
Annotazioni
Quando possibile, è necessario dichiarare la variabile come del tipo di classe che si intende assegnare. Questa operazione viene chiamata associazione anticipata. Se non si conosce il tipo di classe in fase di compilazione, è possibile richiamare l'associazione tardiva dichiarando che la variabile sia del tipo di dati Object. Tuttavia, l'associazione tardiva può rallentare le prestazioni e limitare l'accesso ai membri dell'oggetto di runtime. Per altre informazioni, vedere Dichiarazione di variabile oggetto.
Istanze multiple
Gli oggetti appena creati da una classe sono spesso identici tra loro. Una volta esistenti come singoli oggetti, tuttavia, le variabili e le proprietà possono essere modificate indipendentemente dalle altre istanze. Ad esempio, se si aggiungono tre caselle di controllo a un modulo, ogni oggetto casella di controllo è un'istanza della CheckBox classe . I singoli CheckBox oggetti condividono un set comune di caratteristiche e funzionalità (proprietà, variabili, routine ed eventi) definiti dalla classe . Tuttavia, ognuno ha il proprio nome, può essere abilitato e disabilitato separatamente e può essere inserito in un percorso diverso nel modulo.
Membri dell'oggetto
Un oggetto è un elemento di un'applicazione, che rappresenta un'istanza di una classe. I campi, le proprietà, i metodi e gli eventi sono i blocchi predefiniti degli oggetti e costituiscono i relativi membri.
Accesso ai membri
È possibile accedere a un membro di un oggetto specificando, in ordine, il nome della variabile oggetto, un punto (.
) e il nome del membro. Nell'esempio seguente viene impostata la Text proprietà di un Label oggetto .
warningLabel.Text = "Data not saved"
Elenco di membri intelliSense
IntelliSense elenca i membri di una classe quando si richiama l'opzione Elenca membri, ad esempio quando si digita un punto (.
) come operatore di accesso ai membri. Se si digita il punto dopo il nome di una variabile dichiarata come istanza di tale classe, IntelliSense elenca tutti i membri dell'istanza e nessuno dei membri condivisi. Se si digita il punto dopo il nome stesso della classe, IntelliSense elenca tutti i membri condivisi e nessun membro di istanza. Per altre informazioni, vedere Using IntelliSense.
Campi e proprietà
I campi e le proprietà rappresentano le informazioni archiviate in un oggetto . I valori vengono recuperati e impostati con istruzioni di assegnazione allo stesso modo in cui si recuperano e si impostano le variabili locali in una routine. Nell'esempio seguente viene recuperata la Width proprietà e viene impostata la ForeColor proprietà di un Label oggetto .
Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red
Si noti che un campo è detto anche variabile membro.
Utilizzare le procedure delle proprietà quando:
È necessario controllare quando e come viene impostato o recuperato un valore.
La proprietà ha un set ben definito di valori che devono essere convalidati.
L'impostazione del valore causa una modifica percepibile dello stato dell'oggetto, ad esempio una
IsVisible
proprietà.L'impostazione della proprietà comporta modifiche ad altre variabili interne o ai valori di altre proprietà.
È necessario eseguire un set di passaggi prima che la proprietà possa essere impostata o recuperata.
Usare i campi quando:
Il valore è di un tipo che si autovalida. Ad esempio, si verifica un errore o una conversione automatica dei dati se un valore diverso da
True
oFalse
viene assegnato a unaBoolean
variabile.Qualsiasi valore nell'intervallo supportato dal tipo di dati è valido. Questo vale per molte proprietà di tipo
Single
oDouble
.La proprietà è un
String
tipo di dati e non esiste alcun vincolo per le dimensioni o il valore della stringa.Per altre informazioni, vedere Procedure di proprietà.
Suggerimento
Mantenere sempre privati i campi non costanti. Quando vuoi renderla pubblica, usa una proprietà invece.
Metodi
Un metodo è un'azione che può essere eseguita da un oggetto. Ad esempio, Add è un metodo dell'oggetto ComboBox che aggiunge una nuova voce a una casella combinata.
Nell'esempio seguente viene illustrato il Start metodo di un Timer oggetto .
Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()
Si noti che un metodo è semplicemente una routine esposta da un oggetto .
Per altre informazioni, vedere Procedure.
Avvenimenti
Un evento è un'azione riconosciuta da un oggetto, ad esempio facendo clic sul mouse o premendo un tasto e per cui è possibile scrivere codice per rispondere. Gli eventi possono verificarsi a causa di un'azione dell'utente o di un codice del programma oppure possono essere causati dal sistema. Il codice che segnala un evento viene detto di generare l'evento e il codice che risponde a esso viene detto di gestirlo .
È anche possibile sviluppare eventi personalizzati da generare dagli oggetti e gestirli da altri oggetti. Per altre informazioni, vedere Events.
Membri di istanza e membri condivisi
Quando si crea un oggetto da una classe, il risultato è un'istanza di tale classe. I membri non dichiarati con la parola chiave Shared sono membri dell'istanza, che appartengono esclusivamente a tale istanza specifica. Un membro di un'istanza è indipendente dallo stesso membro in un'altra istanza della stessa classe. Una variabile membro dell'istanza, ad esempio, può avere valori diversi in istanze diverse.
I membri dichiarati con la Shared
parola chiave sono membri condivisi, che appartengono alla classe nel suo complesso e non a una particolare istanza. Un membro condiviso esiste una sola volta, indipendentemente dal numero di istanze della relativa classe creata o anche se non si creano istanze. Una variabile membro condivisa, ad esempio, ha un solo valore, disponibile per tutto il codice che può accedere alla classe.
Accesso a membri non condivisi
Assicurarsi che l'oggetto sia stato creato dalla relativa classe e assegnato a una variabile oggetto.
Dim secondForm As New System.Windows.Forms.Form
Nella dichiarazione che accede al membro, segui il nome della variabile oggetto con l'operatore di accesso ai membri () e poi il nome del membro.
secondForm.Show()
Accesso ai membri condivisi
Seguire il nome della classe con l'operatore member-access (
.
) e quindi il nome del membro. È sempre necessario accedere a unShared
membro dell'oggetto direttamente tramite il nome della classe.Console.WriteLine("This computer is called " & Environment.MachineName)
Se è già stato creato un oggetto dalla classe , è possibile accedere a un
Shared
membro tramite la variabile dell'oggetto.
Differenze tra classi e moduli
La differenza principale tra classi e moduli è che le classi possono essere istanziate come oggetti, mentre i moduli standard non possono. Poiché è presente una sola copia dei dati di un modulo standard, quando una parte del programma modifica una variabile pubblica in un modulo standard, qualsiasi altra parte del programma ottiene lo stesso valore se la legge. Al contrario, i dati dell'oggetto esistono separatamente per ogni oggetto istanziato. Un'altra differenza è che, a differenza dei moduli standard, le classi possono implementare interfacce. Se una classe è contrassegnata con il modificatore MustInherit, non si può creare un'istanza direttamente. Tuttavia, è ancora diverso da un modulo perché può essere ereditato mentre i moduli non possono essere ereditati.
Annotazioni
Quando il Shared
modificatore viene applicato a un membro di classe, viene associato alla classe stessa anziché a una particolare istanza della classe . L'accesso al membro viene eseguito direttamente usando il nome della classe, allo stesso modo in cui si accede ai membri del modulo.
Le classi e i moduli usano anche ambiti diversi per i loro membri. I membri definiti all'interno di una classe sono inclusi in un'istanza specifica della classe ed esistono solo per la durata dell'oggetto. Per accedere ai membri della classe dall'esterno di una classe, è necessario usare nomi completi nel formato Object. Membro.
D'altra parte, i membri dichiarati all'interno di un modulo sono accessibili pubblicamente per impostazione predefinita e possono essere accessibili da qualsiasi codice che possa accedere al modulo. Ciò significa che le variabili in un modulo standard sono effettivamente variabili globali perché sono visibili da qualsiasi punto del progetto e esistono per la vita del programma.
Riutilizzo di classi e oggetti
Gli oggetti consentono di dichiarare variabili e procedure una sola volta e quindi riutilizzarle ogni volta che necessario. Ad esempio, se si vuole aggiungere un correttore ortografico a un'applicazione, è possibile definire tutte le variabili e le funzioni di supporto per fornire funzionalità di controllo ortografico. Se si crea il correttore ortografico come classe, è possibile riutilizzarlo in altre applicazioni aggiungendo un riferimento all'assembly compilato. Meglio ancora, potresti essere in grado di risparmiare qualche lavoro usando una classe del correttore ortografico già sviluppata da un altro utente.
.NET offre molti esempi di componenti disponibili per l'uso. Nell'esempio seguente, viene utilizzata la classe TimeZone nello spazio dei nomi System. TimeZone fornisce dei membri che consentono di recuperare informazioni sul fuso orario del sistema informatico corrente.
Public Sub ExamineTimeZone()
Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
Dim s As String = "Current time zone is "
s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
s &= "different from UTC (coordinated universal time)"
s &= vbCrLf & "and is currently "
If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
s &= "on ""summer time""."
Console.WriteLine(s)
End Sub
Nell'esempio precedente, la prima istruzione Dim dichiara una variabile oggetto di tipo TimeZone e la assegna a un TimeZone oggetto restituito dalla CurrentTimeZone proprietà .
Relazioni tra oggetti
Gli oggetti possono essere correlati tra loro in diversi modi. I tipi principali di relazione sono gerarchici e di contenimento.
Relazione gerarchica
Quando le classi sono derivate da classi più fondamentali, si dice che abbiano una relazione gerarchica. Le gerarchie di classi sono utili per descrivere gli elementi che sono un sottotipo di una classe più generale.
Nell'esempio seguente si supponga di voler definire un tipo speciale di Button che agisca come normale Button , ma espone anche un metodo che inverte i colori di primo piano e di sfondo.
Definire una classe derivata da una classe già esistente
Usare un'istruzione class per definire una classe da cui creare l'oggetto necessario.
Public Class ReversibleButton
Assicurarsi che un'istruzione
End Class
segua l'ultima riga di codice nella classe. Per impostazione predefinita, l'IDE (Integrated Development Environment) genera automaticamente un oggettoEnd Class
quando si immette un'istruzioneClass
.Seguite immediatamente l'istruzione
Class
con un'istruzione Inherits. Specificare la classe da cui deriva la nuova classe.Inherits System.Windows.Forms.Button
La nuova classe eredita tutti i membri definiti dalla classe base.
Aggiungere il codice per i membri aggiuntivi esposti dalla classe derivata. Ad esempio, è possibile aggiungere un
ReverseColors
metodo e la classe derivata potrebbe essere simile alla seguente:Public Class ReversibleButton Inherits System.Windows.Forms.Button Public Sub ReverseColors() Dim saveColor As System.Drawing.Color = Me.BackColor Me.BackColor = Me.ForeColor Me.ForeColor = saveColor End Sub End Class
Se si crea un oggetto dalla
ReversibleButton
classe , può accedere a tutti i membri della Button classe , nonché alReverseColors
metodo e a tutti gli altri nuovi membri definiti inReversibleButton
.
Le classi derivate ereditano membri dalla classe su cui si basano, consentendo di aggiungere complessità mentre si procede in una gerarchia di classi. Per altre informazioni, vedere Nozioni di base sull'ereditarietà.
Compilare il codice
Assicurarsi che il compilatore possa accedere alla classe da cui si intende derivare la nuova classe. Ciò potrebbe significare qualificarne completamente il nome, come nell'esempio precedente, o identificarne lo spazio dei nomi in un'istruzione Imports (spazio dei nomi.NET e tipo). Se la classe si trova in un progetto diverso, potrebbe essere necessario aggiungere un riferimento a tale progetto. Per altre informazioni, vedere Gestione dei riferimenti in un progetto.
Relazione di contenimento
Un altro modo in cui gli oggetti possono essere correlati è una relazione di contenimento. Gli oggetti contenitore incapsulano logicamente altri oggetti. Ad esempio, l'oggetto OperatingSystem contiene logicamente un Version oggetto che restituisce tramite la relativa Version proprietà. Si noti che l'oggetto contenitore non contiene fisicamente altri oggetti.
Collezioni
Un particolare tipo di contenimento di oggetti è rappresentato dalle raccolte. Le raccolte sono gruppi di oggetti simili che possono essere enumerati. Visual Basic supporta una sintassi specifica in For Each...Next che permette di iterare sugli elementi di una raccolta. Inoltre, le raccolte spesso consentono di usare un Item[] per ottenere gli elementi in base all'indice o associandoli a una stringa univoca. Le raccolte possono essere più facili da usare rispetto alle matrici perché consentono di aggiungere o rimuovere elementi senza usare indici. Grazie alla facilità d'uso, le raccolte vengono spesso usate per archiviare moduli e controlli.
Argomenti correlati
Procedura dettagliata: Definizione di classi
Fornisce una descrizione dettagliata di come creare una classe.
Proprietà e metodi sovraccaricati
Proprietà e metodi sovraccaricati
Nozioni di base dell'ereditarietà
Vengono illustrati i modificatori di ereditarietà, l'override di metodi e proprietà, MyClass e MyBase.
Durata degli oggetti: modalità di creazione e eliminazione degli oggetti
Viene descritta la creazione e l'eliminazione di istanze di classe.
Tipi anonimi
Viene descritto come creare e usare tipi anonimi, che consentono di creare oggetti senza scrivere una definizione di classe per il tipo di dati.
Inizializzatori di oggetti: tipi denominati e anonimi
Vengono illustrati gli inizializzatori di oggetto, usati per creare istanze di tipi denominati e anonimi usando una singola espressione.
Procedura: Dedurre nomi e tipi di proprietà nelle dichiarazioni di tipo anonimo
Viene illustrato come dedurre i nomi e i tipi di proprietà nelle dichiarazioni di tipo anonimo. Fornisce esempi di inferenza riuscita e non riuscita.