隨着你class_a
類定義class_b
類型和class_b
的對象包含一個方法命名method
,你的方法將作爲(在DLL)
- 獲取
class_a
對象的Type
在代碼(在class_a_type
存儲如下Type
型)
- 獲取
class_a_type
對象的FieldInfo
對象name_b
對象(存儲它在類型的a_field_info
可變的可變10)字段類型(在你的案件
- 獲取對象,在對象的對象實例
name_b
)通過調用FieldInfo
對象的getValue函數(其存儲在object
型)b_object
可變
- 獲取
MethodInfo
對象爲方法通過調用b_object.GetType().GetMethod("method")
(名爲method
)在上述b_object
對象(並將其存儲在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);
希望幫助!
'method.Invoke'的第一個參數應該是'class_b'的*實例*,而不是類型。你正在調用一個實例方法 - 你仍然需要一個實例。 – Blorgbeard
謝謝,它的工作。 'var instance = Activator.CreateInstance(type_class_b); type_class_a.GetField(「name_b」)。SetValue(type_class_a,instance)' –
使用Activator.CreateInstance(...)創建實例時,會在內存中創建另一個對象。因此,如果您的'class_a'的靜態成員'name_b'存儲在內存位置0x1234,則使用Activator.CreateInstance創建的對象將不是該對象,而是可能存儲在內存地址0x9876的新對象。因此,您可能沒有使用Activator.CreateInstance創建的此對象中的字段和屬性的值相同;而且這也會導致很多耗時的調試時間(因爲你將無法確定值的丟失位置) –