當前位置:成語大全網 - 新華字典 - c#的反射問題 --- 通過反射得到方法中的返回值怎麽做?

c#的反射問題 --- 通過反射得到方法中的返回值怎麽做?

首先,請您先理解壹下反射的基本原理.否則我下述的代碼您可能有點摸不著頭腦.

反射是.NET中的重要機制,通過反射,可以在運行時獲得程序或程序集中每壹個類型(包括類、結構、委托、接口和枚舉等)的成員和成員的信息。有了反射,即可對每壹個類型了如指掌。另外還可以直接創建對象,即使這個對象的類型在編譯時還不知道。?

反射的基本過程如下,請您務必閱讀.完畢後我將給妳寫出對應的代碼.

(1)使用Assembly定義和加載程序集,加載在程序集清單中列出模塊,以及從此程序集中查找類型並創建該類型的實例。?

(2)使用Module了解包含模塊的程序集以及模塊中的類等,還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。?

(3)使用ConstructorInfo了解構造函數的名稱、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。?

(4)使用MethodInfo了解方法的名稱、返回類型、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。

(5)使用FiedInfo了解字段的名稱、訪問修飾符(如public或private)和實現詳細信息(如static)等,並獲取或設置字段值。

(6)使用EventInfo了解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,添加或移除事件處理程序。?

(7)使用PropertyInfo了解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等,獲取或設置屬性值。?

(8)使用ParameterInfo了解參數的名稱、數據類型、是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。

//加載程序集(dll文件地址),使用Assembly類

Assembly?assembly?=?Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory?+?"Bin/App_Code.dll");?

//獲取類型,參數(名稱空間+類)

Type?type?=?assembly.GetType("assembly_name.assembly_class");?

//創建該對象的實例,object類型,參數(名稱空間+類)

object?instance?=?assembly.CreateInstance("assembly_name.assembly_class");?

//設置Show_Str方法中的參數類型,Type[]類型;如有多個參數可以追加多個

Type[]?params_type?=?new?Type[1];?

params_type[0]?=?Type.GetType("System.String");?

//設置Show_Str方法中的參數值;如有多個參數可以追加多個

Object[]?params_obj?=?new?Object[1];?

params_obj[0]?=?"jiaopeng";?

//執行Show_Str方法

object?value?=?type.GetMethod("Show_Str",?params_type).Invoke(instance,?params_obj);