加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用反射调用类的静态方法

发布时间:2020-12-15 23:36:31 所属栏目:百科 来源:网络整理
导读:我试图通过反射调用静态类方法并获取其返回值,如下所示: private SA GetData(){ Type type = Type.GetType("SA010"); Object obj = Activator.CreateInstance(type); MethodInfo methodInfo = type.GetMethod("GetSA"); return (SA)methodInfo.Invoke(obj,n
我试图通过反射调用静态类方法并获取其返回值,如下所示:

private SA GetData()
{
    Type type = Type.GetType("SA010");

    Object obj = Activator.CreateInstance(type);

    MethodInfo methodInfo = type.GetMethod("GetSA");

    return (SA)methodInfo.Invoke(obj,null);
}

这是我正在调用的类和方法:

public class SA010
{
    public static SA GetSA()
    {
        //do stuff
        return SA.
    }
}

问题是我在’type’变量上收到一个空引用异常. GetData()和SA010.GetSA()位于同一名称空间中.

任何想法为什么我可能会得到这个错误,这与它是静态的可能吗?

解决方法

您的主要问题是在使用GetType时需要指定SA010的完整命名空间.

Type type = Type.GetType("SomeNamespace.SA010");

但是,如果您没有动态生成名称,则更简单的解决方案是使用typeof,如果类型已在范围内,则不需要整个命名空间.

Type type = typeof(SA010);

第二个问题,你将在修复类型后运行,如果方法是静态的,你不创建它的实例,你只需为Invoke调用的实例传入null.

private SA GetData()
{
    Type type = typeof(SA010);

    MethodInfo methodInfo = type.GetMethod("GetSA");

    return (SA)methodInfo.Invoke(null,null);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读