Ciao
Sì, puoi farlo, utilizzando i metodi della classe Type.
Per ottenere il Type di una variabile ti basta usare il metodo GetType, quindi puoi usare il metodo GetInterface per verificare che la classe implementi una data interfaccia (se non è così restituisce Nothing), e il metodo IsSubclassOf per controllare se la classe derivi da quella specificata.
In alternativa puoi usare il metodo IsAssignableFrom che restituisce True quando al tipo della variabile può essere assegnata un'istanza del secondo tipo, ovvero quando il primo tipo coincide col secondo, oppure deriva da esso, oppure implementa l'interfaccia.
Eccoti l'esempio:
'Una variabile di tipo SolidBrush
Dim obj As New SolidBrush(Color.Black)
'Ottiene il tipo di obj
Dim objType As Type = obj.GetType()
'Così verifichi che obj implementi l'interfaccia ICloneable
If objType.GetInterface("ICloneable", True) IsNot Nothing Then
MsgBox("obj Implementa ICloneable")
End If
'Così verifichi che obj derivi da Brush
If objType.IsSubclassOf(GetType(Brush)) Then
MsgBox("obj Deriva da Brush")
End If
'Così verifichi che a obj sia assegnabile una variabile di tipo AltroTipo,
'ovvero se AltroTipo è una classe, verifica che onj sia o dello stesso tipo,
'o una classe derivata, e se AltroTipo è un'interfaccia, che obj la implementi
If objType.IsAssignableFrom(GetType(AltroTipo)) Then
MsgBox("A obj è assegnabile un'istanza di AltroTipo")
End If
Luca