Condividi tramite


Determinazione del tipo di un oggetto

Aggiornamento: novembre 2007

Le variabili oggetto generiche (ovvero le variabili dichiarate come Object) possono contenere oggetti di qualunque classe. Quando si utilizzano variabili di tipo Object, le operazioni consentite dipendono dalla classe dell'oggetto. È ad esempio possibile che alcuni oggetti non supportino un metodo o una proprietà specifici. In Visual Basic sono disponibili due sistemi per la definizione del tipo di oggetto memorizzato nella variabile oggetto, ovvero la funzione TypeName e l'operatore TypeOf...Is.

TypeName e TypeOf…Is

La funzione TypeName restituisce una stringa e rappresenta la scelta ideale per la memorizzazione o la visualizzazione del nome della classe di un oggetto, come illustrato nel seguente frammento di codice:

Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))

L'uso dell'operatore TypeOf...Is è invece ideale per la verifica del tipo di oggetto, in quanto è più rapido rispetto a un confronto di stringhe equivalente nel quale viene adoperata la funzione TypeName. Nel frammento di codice che segue viene utilizzato l'operatore TypeOf...Is all'interno di un'istruzione If...Then...Else:

If TypeOf Ctrl Is Button Then
    MsgBox("The control is a button.")
End If

A questo punto è necessaria una raccomandazione. L'operatore TypeOf...Is restituisce True se un oggetto appartiene a o è derivato da un tipo specifico. Quasi tutte le operazioni eseguite in Visual Basic implicano l'utilizzo di oggetti, inclusi alcuni elementi normalmente non considerati oggetti, quali stringhe e valori integer. Questi oggetti derivano da Object e ne ereditano i metodi. Quando viene passato un Integer e valutato con Object, l'operatore TypeOf...Is restituisce True. L'esempio che segue indica che il parametro InParam è sia un Object sia un Integer:

Sub CheckType(ByVal InParam As Object)
    ' Both If statements evaluate to True when an
    ' Integer is passed to this procedure.
    If TypeOf InParam Is Object Then
        MsgBox("InParam is an Object")
    End If
    If TypeOf InParam Is Integer Then
        MsgBox("InParam is an Integer")
    End If
End Sub

Nell'esempio che segue vengono utilizzati sia TypeOf...Is sia TypeName per determinare il tipo di oggetto passato nell'argomento Ctrl. La routine TestObject chiama ShowType con tre diversi tipi di controlli.

Per eseguire l'esempio

  1. Creare un nuovo progetto di applicazione per Windows e aggiungere al form un controllo Button, un controllo CheckBox e un controllo RadioButton.

  2. Dal pulsante sul form, chiamare la routine TestObject.

  3. Aggiungere il seguente codice al form:

    Sub ShowType(ByVal Ctrl As Object)
        'Use the TypeName function to display the class name as text.
        MsgBox(TypeName(Ctrl))
        'Use the TypeOf function to determine the object's type.
        If TypeOf Ctrl Is Button Then
            MsgBox("The control is a button.")
        ElseIf TypeOf Ctrl Is CheckBox Then
            MsgBox("The control is a check box.")
        Else
            MsgBox("The object is some other type of control.")
        End If
    End Sub
    
    Protected Sub TestObject()
        'Test the ShowType procedure with three kinds of objects.
        ShowType(Me.Button1)
        ShowType(Me.CheckBox1)
        ShowType(Me.RadioButton1)
    End Sub
    

Vedere anche

Concetti

Chiamata di una proprietà o di un metodo mediante un nome di stringa

Riferimenti

Tipo di dati Object

Funzione TypeName (Visual Basic)

Istruzione If...Then...Else (Visual Basic)

Tipo di dati String (Visual Basic)

Tipo di dati Integer (Visual Basic)

Altre risorse

Visualizzazione di informazioni sulla classe in fase di esecuzione