gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:07:27 25 4
gpt4 key购买 nike

我正在尝试通过反射调用静态类方法并获取其返回值,如下所示:

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.
}
}

问题是我在“类型”变量上收到空引用异常。 GetData() 和 SA010.GetSA() 在同一个命名空间中。

我可能会收到此错误的任何想法,可能与它是静态的有关吗?

最佳答案

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

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

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

Type type = typeof(SA010);

一旦你修复了类型,你会遇到第二个问题,如果一个方法是静态的,你不会创建它的实例,你只需为 的实例传递 null >调用调用。

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

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

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

关于c# - 使用反射调用类的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41042478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com