簡體   English   中英

反射:在靜態字段內調用方法

[英]Reflection: invoke method inside static field

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)
    {
    }
}

但我有錯誤

mscorlib.dll中發生了類型為'System.Reflection.TargetException'的未處理異常。其他信息:對象與目標類型不匹配。

那怎么調用呢? 謝謝。

如你的類class_a定義類型的對象class_bclass_b包含方法命名method ,你的方法將是如下(DLL)

  1. 在代碼中獲取class_a對象的Type (存儲在Type class_a_type變量中)
  2. 獲取FieldInfo的對象class_a_type對象name_b對象(其存儲在a_field_info類型的可變FieldInfo
  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.Invoke來傳遞class_b的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM