2010-11-04 7 views
1

i créer une instance d'une classe de personne utilisant la réflexion et l'exécution de son constructeur et après que j'exécuter une autre fonction de la classe personne appelée « Exécuter »:variables de classe réinitialisées à NULL dans la réflexion C#

Assembly assembly = Assembly.GetEntryAssembly(); 
object personObject = assembly.CreateInstance("ReflectionTest.Person"); 

// Call Constructor 
var ctor = personObject.GetType().GetConstructor(new Type[] { typeof(int) }); 
var obj = ctor.Invoke(new object[] { 10 }); 

// Call Method 
MethodInfo methodInfo = personObject.GetType().GetMethod("Execute"); 
object obj1 = methodInfo.Invoke(personObject, null); 

Th Le problème est que toutes les variables de classe de personne que j'ai instanciées dans le constructeur SONT NULES quand j'appelle la méthode "Execute". Pourquoi ? et comment puis-je contourner cela?

Répondre

1

Dans votre exemple, vous invoquez le constructeur par défaut avec cette ligne:

object personObject = assembly.CreateInstance("ReflectionTest.Person"); 

Ce serait la bonne façon de construire l'objet:

Assembly assembly = Assembly.GetEntryAssembly(); 
Type personType = assembly.GetType("ReflectionTest.Person"); 
object inst = Activator.CreateInstance(personType, new object[] { 10 }); 
+0

yup, cette réponse a certainement fait le travail ! Merci! – Rodniko

0

Je ne suis pas 100%, mais je pourrais lancer obj à une aide de personne?

Questions connexes