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);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值