这篇是对于上一篇C# – 查看类有哪些属性、方法的补充,所以关于部分代码请去上一篇查看。
先来看一个利用反射调用方法时C#的报错:TargetParameterCountException: Number of parameters specified does not match the expected number.
这个报错的意思我们在调用反射的时候呀,传递的参数和申明的不一致。
好了,我们看看我们一般想要调用方法的情况
1、无形参
2、固定形参
3、不定形参
这里我只说情况1、3.
2的话和3类似。
先定义一个类,有两个方法
public class TestObject
{
public virtual void Init(params object[] args) { }
public virtual void Recycle() { }
}
查看API,反射调用方法,parameters是一个object[]类型的参数
public object Invoke (object obj, object[] parameters);
调用方法,调用Init的时候必须要传递参数,如果有参数的话直接传递,如果没有参数的话,必须传递空参数;而Recycle方法不需要参数,调用直接传递null才行。不然都会报上面的错误。
public void Test1(params object[] args)
{
obj = new TestObject();
var methodInfo = obj.GetMethod("Init");
if (methodInfo != null) {
if (args.Length > 0)
methodInfo.Invoke(obj, args);
else
methodInfo.Invoke(obj, new object[] { null });
}
}
public void Test2()
{
obj = new TestObject();
var methodInfo = obj.GetMethod("Recycle");
if (methodInfo != null)
{
methodInfo.Invoke(obj, null);
}
}