Type type_class_a = ....;
Type type_class_b = type_class_a.GetField("name_b").FieldType;
MethodInfo method = type_class_b.GetMethod("method");
method.Invoke(type_class_b,new object[] {"test_string"});
在dll public class class_a
{
public static class_b name_b = new class_b();
}
public class class_b
{
public void method(string data)
{
}
}
but I got error
类型为"System.Reflection"的未处理异常。在mscorlib.dll中发生TargetException'附加信息:Object does not match target type.
那么如何调用呢?谢谢。
由于您的类class_a
定义了类型为class_b
的对象,并且class_b
包含了名为method
的方法,因此您的方法将如下所示(在dll中)
- 在代码中获取
class_a
对象的Type
(存储在class_a_type
类型的Type
变量中) - 为
name_b
对象获取class_a_type
对象的FieldInfo
对象(将其存储在FieldInfo
类型的a_field_info
变量中) - 通过调用
FieldInfo
对象的GetValue函数(将其存储在object
类型的b_object
变量中)在对象中获取该字段类型的对象(在您的情况下,对象实例name_b
) - 通过调用
b_object.GetType().GetMethod("method")
为上述b_object
对象中的方法(名为method
)获取MethodInfo
对象(并将其存储在MethodInfo
类型的b_method
对象中) - 通过在上述
b_method
对象上调用Invoke
函数并将b_object
作为第一个参数(调用函数的对象)传递,将null
作为第二个参数(要传递给函数的参数数组)来调用该方法。
有点混乱??查找下面的示例:
Type class_a_type = class_a_object.GetType();
FieldInfo a_field_info = class_a_type.GetField("name_b");
object b_object = a_field_info.GetValue(class_a_object);
MethodInfo b_method = b_object.GetType().GetMethod("method");
b_method.Invoke(b_object, null);
希望有帮助!
获得name_b的FieldInfo后,需要调用FieldInfo. getvalue (null)来获取实际值(class_b的实例)。您还需要typeof(class_b).method的MethodInfo。
一旦你有了这两个,你就可以调用methodInfo。