Interfacce e sottoclassi

lunedì 15 dicembre 2008 - 23.20

emincas Profilo | Newbie

Salve volevo sapere se in vb.net è possibile conoscere a runtime se una istanza di classe implementa una interfaccia oppure eredita da una particolare classe?


grazie in anticipo a chi mi aiuterà.

aiedail92 Profilo | Expert

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

emincas Profilo | Newbie

Grazie Luca.

ti sono debitore.


aiedail92 Profilo | Expert

Figurati, è un piacere

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5