如何使用反射调用方法
本文关键字:方法 调用 反射 何使用 | 更新日期: 2023-09-27 18:32:28
我想知道如何使用 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); } } } }
- 是否根据传递的参数的数量和类型调用的方法。如果是,那么为什么
编译器不显示错误,因为 **相同的语句用于调用方法 show 和
显示1**?
或
- 该方法基于m(MethodInfo m)的某个参考值和参数数。
您可以使用 MethodBase 类调用这些方法。
使用指定的参数调用当前实例表示的方法或构造函数。请参阅此链接 在反射中调用的方法