1
我想知道如何在c#中使用反射調用方法。如何使用反射調用方法
這是我從書中挑選的代碼
using System; using System.Reflection; class MyClass { int x; int y; public MyClass(int i, int j) { x = i; y = j; } public int Sum() { return x+y; } public bool IsBetween(int i) { if((x < i) && (i < y)) return true; else return false; } public void Set(int a, int b) { Console.Write("Inside Set(int, int). "); x = a; y = b; Show(); } // Overload set. public void Set(double a, double b) { Console.Write("Inside Set(double, double). "); x = (int) a; y = (int) b; Show(); } public void Show() { Console.WriteLine("Values are x: {0}, y: {1}", x, y); } public void Show1() { Console.WriteLine("Hello"); } } class InvokeMethDemo { static void Main() { Type t = typeof(MyClass); MyClass reflectOb = new MyClass(10, 20); int val; Console.WriteLine("Invoking methods in " + t.Name); Console.WriteLine(); MethodInfo[] mi = t.GetMethods(); // Invoke each method. foreach(MethodInfo m in mi) { // Get the parameters. ParameterInfo[] pi = m.GetParameters(); if(m.Name.Equals("Set", StringComparison.Ordinal) && pi[0].ParameterType == typeof(int)) { object[] args = new object[2]; args[0] = 9; args[1] = 18; m.Invoke(reflectOb, args); } else if(m.Name.Equals("Set", StringComparison.Ordinal) && pi[0].ParameterType == typeof(double)) { object[] args = new object[2]; args[0] = 1.12; args[1] = 23.4; m.Invoke(reflectOb, args); } else if(m.Name.Equals("Sum", StringComparison.Ordinal)) { val = (int) m.Invoke(reflectOb, null); Console.WriteLine("sum is " + val); } else if(m.Name.Equals("IsBetween", StringComparison.Ordinal)) { object[] args = new object[1]; args[0] = 14; if((bool) m.Invoke(reflectOb, args)) Console.WriteLine("14 is between x and y"); } else if(m.Name.Equals("Show", StringComparison.Ordinal)) { m.Invoke(reflectOb, null); } else if(m.Name.Equals("Show1", StringComparison.Ordinal)) { m.Invoke(reflectOb, null); } } } }
- 是方法調用的基礎上的數量和參數類型passed.If是,那麼爲什麼
編譯器不顯示錯誤,因爲**相同的語句用於調用方法顯示並且
show1 **?
OR
- 的方法基於的米(MethodInfo的米)一些基準值和 數量的參數調用。
該方法僅基於MethodInfo調用。 – 2012-04-27 05:46:30