Conversion d'une chaine String en Class

Résolu
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010 - 3 oct. 2009 à 11:12
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010 - 5 oct. 2009 à 21:44
Bonjour,

Je poste ce message car je ne trouve pas de solution a mon problème.

J'ai une chaine string : string _sClassName="MyClass"

La classe MyClass existe bien dans mon projet, j'aimerai savoir si il est possible de convertir _sClassName en Class ?

Si vous une réponse ou même une idée qui pourrai m'orienter dans la réponse je suis preneur.

Merci d'avance.

PROTEUS

2 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 32
4 oct. 2009 à 22:12
Bonjour,

il faut utiliser la reflexion
je n'ai pas d'environnement de dev pour tester, mais de mémoire:

pour une methode de type
public bool Mamethode (int num, string code){...}
contenu dans une classe MaClasse
contenue dans une DLL MaDll.dll
ça donnerait quelquechose comme ça:

using System.Reflection;
...

// definition du tableau de parametres à passer à la methode
Object[] args = new Object[] { 123, "test" };

//chargment de l'assembly et récuperation de du constructeur de la classe
Type T = Assembly.Load("MaDll").GetType("MaClasse", true);
//création d'une instance par appel du constructeur
object m_Value = Convert.ChangeType(Activator.CreateInstance(T), T);

// appel de la methode avec les parametres sous forme de tableau

 bool ret = (bool)m_Value.GetType().InvokeMember("Mamethode",BindingFlags.ExactBinding|BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding,null,m_Value,args);


à la casse pret.
Bon courage...

C# is amazing, enjoy it!
3
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010
5 oct. 2009 à 21:44
Merci pour ta réponse, Je n'ai pas eu le temps de revenir poster la réponse mais effectivement tu avais raison la solution se trouvais dans le name "Using.Reflection"

PROTEUS
0