反射:调用静态字段内的方法

本文关键字:方法 字段 静态 调用 反射 | 更新日期: 2023-09-27 18:04:42

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中)

  1. 在代码中获取class_a对象的Type(存储在class_a_type类型的Type变量中)
  2. name_b对象获取class_a_type对象的FieldInfo对象(将其存储在FieldInfo类型的a_field_info变量中)
  3. 通过调用FieldInfo对象的GetValue函数(将其存储在object类型的b_object变量中)在对象中获取该字段类型的对象(在您的情况下,对象实例name_b)
  4. 通过调用b_object.GetType().GetMethod("method")为上述b_object对象中的方法(名为method)获取MethodInfo对象(并将其存储在MethodInfo类型的b_method对象中)
  5. 通过在上述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。