[C#] Instanciation dynamique d'une classe générique
Bonjour à tous !
En connaissant le nom d'un type simple il est très simple d'en faire une instance :
Code:
1 2 3 4 5 6 7 8 9
|
private static object CreateInstance(string typeName)
{
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
foreach (Type type in assembly.GetTypes())
if ((typeName == type.Name) || (typeName == type.FullName))
return Activator.CreateInstance(type);
return null;
} |
Mais admettons que typeName désigne une classe générique...
Par exemple :
Code:
1 2
|
string typeName = "System.Collections.Generic.List<System.String>"; |
Comment peut-on l'instancier ?
Il faut savoir que pour en déterminé l'assembly (afin d'en détermine le Type), il faudra transformer la valeur en System.Collections.Generic.List`1.
Ok, jusque là tout va bien : de la simple chaîne de caractères on vient d'en déduire le type. Mais évidement, dans l'état actuel, Activator.CreateInstance ne peut absolument rien faire : nous n'avons pas définit qu'il s'agissait d'une liste de System.String.
Savez-vous (planter des choux... euh non; désolé :mouarf:) comment définir la liste des "Arguments génériques", afin de procéder à l'instanciation ?
@++
NeoMan
PS : pour info, si vous désirez connaître les arguments génériques d'une instance déjà existante il suffit de faire :
Code:
1 2
|
Type[] argsGenerics = monInstance.GetType().GetGenericArguments(); |
Question sur l'utilisation objet dynamique
Citation:
Envoyé par
NeoMan
Bonjour à tous !
En connaissant le nom d'un type simple il est très simple d'en faire une instance :
Code:
1 2 3 4 5 6 7 8 9
|
private static object CreateInstance(string typeName)
{
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
foreach (Type type in assembly.GetTypes())
if ((typeName == type.Name) || (typeName == type.FullName))
return Activator.CreateInstance(type);
return null;
} |
Bonjour, j'ai une question à vous poser.
Comment pour que je puisse utiliser l'objet instancier return Activator.CreateInstance(type); que j'ai récupéré par un autre objet de type Object ? Par exemple , j'ai envie d'appeler un function qui se trouve dans un autre Classe. Merci d'avance
Code:
1 2 3 4 5 6 7
|
Object obj;
Tools objTool = new Tools();
obj = objTool.CreateInstance("Electric");
obj. ???? |