Vi siete mai chiesti se fosse possibile istanziare un
oggetto conoscendo a runtime il suo nome?
La risposta è naturalmente Sì
Supponiamo di voler istanziare un oggetto ArrayList
conoscendo il suo nome, completo di namespace di appartenenza: “
System.Collections.ArrayList”
Dim className As String = "System.Collections.ArrayList"
In questo caso utilizziamo
una stringa “cablata” nel codice ma il nome della classe da istanziare potrebbe
provenire tranquillamente da una Console.ReadLine() o da un parametro di funzione.
Il primo passo da eseguire è ricavare l’oggetto
System.Type
corrispondente alla classe da generare.
Normalmente, avendo a disposizione l’oggetto di una data
classe basta utilizzare gettype(myObject) oppure
myObject.GetType(), purtroppo in questo
caso l’oggetto è quello che vogliamo ottenere, mentre ciò che abbiamo a
disposizione è la stringa contenente il nome della classe.
Per ottenere l’oggetto Type
corrispondente ad una particolare classe, partendo dalla stringa contenente il
nome è necessario utilizzare il metodo Type.GetType(String).
Dim myClassType As Type =
Type.GetType(className)
Una volta ricavato l’oggetto
Type sarà necessario utilizzare la classe System.Activator ed in particolare il metodo statico Activator.CreateInstance(Type),
che , partendo da un oggetto Type restituisce un istanza del tipo associato, upcastata
ad Object.
Dim myObject As Object = Activator.CreateInstance(myClassType)
Et voilà, l'oggetto è servito