C# -- 反射调用方法(补充)

这篇是对于上一篇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);
    }
}

你可能感兴趣的:(C#,c#,反射,调用方法)