前言
獲取方法的相關信息的兩種形式
反射是一種允許用戶獲得類信息的C#功能,Type對象映射它代表的底層對象;
在.Net 中, 一旦獲得了Type對象,就可以使用GetMethods()方法獲取此類型支持的方法列表;該方法的兩種形式:
MethodInfo [] GetMethods()
MethodInfo [] GetMethods(BindingFlags bindingflas) :它的參數帶有一些限制 BindingFlags 是一個枚舉
枚舉成員 [Instance ,Public
ParameterInfo[] GetParameters() 方法返回一個方法的參數列表
下面用到的類 MyClass ,為了方便閱讀,我把它折疊了!
MyClass
Main:
Type t = (MyClass); Console.WriteLine( + Console.WriteLine( Console.WriteLine( 第一種形式 第二種形式 MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | (MethodInfo m Console.Write( + m.ReturnType.Name + + m.Name + ); ParameterInfo[] pi = m.GetParameters(); ( i = ; i < pi.Length; i++ Console.Write(pi[i].ParameterType.Name + + pi[i].Name); (i+< Console.Write( Console.WriteLine( Console.ReadKey();
使用反射調用方法
上面 討論了怎麼獲取一個類型所支持的方法,然而為我們獲取對方法的調用做了充分的准備!
MethodInfo類中的Invoke() 方法提供了該技能!
它的一種形式: object Invoke(object obj,object [] paramenters)
obj 是一個對象引用,將調用它所指向的對象上的方法,對於static方法,obj必須為null。
所有需要傳遞給方法的參數都必須在parameters數組中指定。如果方法不需要參數,則paramenters必須為null
基類MethodBase的 Invoke()方法返回被調用方法的返回值
請看下面的事例:
MyClass類Set()方法有所改變:
Set( a, Console.WriteLine( x = y = Set( a, Console.WriteLine( x = ( y = ( }
Main