Istanziare Oggetti con Type

mercoledì 21 ottobre 2009 - 08.22

emincas Profilo | Newbie

Salve
ho necessita di istanziare dinamicamente (runtime) degli oggetti.
in particolare, ottenuto il type da una stringa:

Type objType = Type.GetType("MyObject");

mi servirebbe istanziare un oggetto del tipo objType.

qualcuno mi può aiutare?

grazie
Emiliano

Pinky Profilo | Junior Member

Puoi usare
Activator.CreateInstance

oppure tramite reflection ottenre tutti i metodi e quindi anche i costruttori di una data classe:
(codice NON testato)
Type type = Type.GetType("AAA");
//vedo se esiste un costruttore privo di parametri
ConstructorInfo ci = type.GetConstructor(new Type[] { });
Object b = ci.Invoke(new Object[] { });

Ciao
Alessandro

freeteo Profilo | Guru

Ciao,
come dice Pinky puoi crearli a runtime con un codice di questo tipo:
string name = "#tuttoilNamespace#.NomeClasse"; Assembly assembly = Assembly.GetExecutingAssembly(); IAnagraficaProvider obj = (IAnagraficaProvider)assembly.CreateInstance(name);

Oppure se ti serve devi caricare l'assembly da nome del file etc...insomma dipende un po' da dov'è questo oggetto che devi creare.
Invece la cosa che ti volevo far notare è che poi l'oggetto creato a runtime devi poi "castarlo" a qualcosa che puoi utilizzare, ecco perchè nell'esempio era un'interfaccia ma andava bene anche ad una classe che magari estende...dipende dalla tua struttura di oggetti, ma meglio se gli oggetti che crei a runtime sai di che "tipo base" (o interfaccia) sono per poterli utilizzare.

Chiaramente il problema potrebbe venire a runtime, perchè si fa un cast nel "CreateInstance" ...ma è inevitabile perchè lui torna un "object"...


Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

emincas Profilo | Newbie

vi ringrazio moltissimo.

siete stai illuminanti entrambi.
effettivamente avevo giusto costruito una interfaccia "generica" da far ereditare a tutte le classi che voglio istanziare con l'activator.


ancora un grazie
emiliano
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