我试图理解反射是如何工作的,所以我的问题是,当我想在程序集中调用某个方法时,为什么要将方法参数作为对象数组而不是字符串发送?
例如,我想调用这个方法,它获得string参数,但我将参数作为对象数组发送。据我所知,对象不能转换为字符串,那么它是如何转换的呢?
public string Display(string Name)
{
return Name;
}发布于 2019-10-10 03:25:02
MethodBase.Invoke允许使用任意类型的许多参数调用方法。
MethodBase.Invoke允许您使用任何参数调用任何方法,包括您的Display(string Name),但也允许MyMethod(int val)和object[] params使调用Invoke的人能够提供任何类型的参数。
回复:
据我所知,对象不能转换为字符串,所以它如何转换它?
这里发生的是拳击,请查看装箱和反装箱(C#编程指南)。
如果您试图用不正确类型的参数调用您的方法,它将无法工作。
下面的代码片段将产生以下输出。
MagicClass.ItsMagic() returned: 900, type: System.Int32
Object of type 'System.String' cannot be converted to type 'System.Int32'.public class MagicClass
{
private int magicBaseValue;
public MagicClass() { magicBaseValue = 9; }
public int ItsMagic(int preMagic) { return preMagic * magicBaseValue; }
}
public static void Main(string[] args)
{
var m = new MagicClass();
MethodInfo magicMethod = m.GetType().GetMethod("ItsMagic");
object magicValue = magicMethod.Invoke(m, new object[] { 100 });
Console.WriteLine($"MagicClass.ItsMagic() returned: {magicValue}, type: {magicValue.GetType()}");
try
{
object magicValue2 = magicMethod.Invoke(m, new object[] { "One hundred" });
} catch (ArgumentException ex) { Console.WriteLine(ex.Message); }
}MagicClass是从MethodBase.Invoke法的多科那里借来的。
https://stackoverflow.com/questions/58314684
复制相似问题