[英]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_b
和class_b
包含方法命名method
,你的方法將是如下(DLL)
class_a
對象的Type
(存儲在Type
class_a_type
變量中) FieldInfo
的對象class_a_type
對象name_b
對象(其存儲在a_field_info
類型的可變FieldInfo
) 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.Invoke來傳遞class_b的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.