我使用反射创建一个Person类的实例并执行其构造函数,然后执行另一个名为“Execute”的person类函数:
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);
问题是当我调用“Execute”方法时,我在构造函数中实例化的所有人类变量都是NULL。为什么?我该如何解决这个问题?
答案 0 :(得分:1)
在您的示例中,您使用以下行调用默认构造函数:
object personObject = assembly.CreateInstance("ReflectionTest.Person");
这是构造对象的正确方法:
Assembly assembly = Assembly.GetEntryAssembly();
Type personType = assembly.GetType("ReflectionTest.Person");
object inst = Activator.CreateInstance(personType, new object[] { 10 });
答案 1 :(得分:0)
我不是100%,但可以将obj投射到人员的帮助中吗?