简体   繁体   English

如何使用反射调用方法

[英]How are methods invoked using Reflection

I want to know that how the methods are invoked using Reflection in c# . 我想知道如何在c#中使用Reflection调用这些方法。

Here is the code i have picked from book 这是我从书中挑选的代码

 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); } } } } 
  1. Is the method invoked based on the number and type of parameters passed.If yes then Why 是否根据传递的参数的数量和类型来调用方法?

the Compiler does not show error as the **same statement is used to call method show and 编译器不会显示错误,因为**相同的语句用于调用方法show和

show1**? show1 **?

OR 要么

  1. The method is invoked based on some reference value of m (MethodInfo m) and the number of parameters. 方法是根据一些参考值m (MethodInfo m) 和参数数量来调用的。

You can invoke the Methods using MethodBase Class. 您可以使用MethodBase类调用方法。

Invokes the method or constructor represented by the current instance, using the specified parameters. 使用指定的参数调用当前实例表示的方法或构造函数。 Refer this link Method Invoking in Reflection 请参考此链接反射中的方法调用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM