我正在抛弃使用Activator类的想法,以便访问程序集中的资源,否则我将为(依赖注入)创建循环引用。我之前已经完成了我需要引用的vanilla类,但我的问题是:我可以使用Activator来访问静态类吗?

让我失望的部分是Activator返回对象的实例,而静态类没有实例。这可能吗?

有帮助吗?

解决方案

您不需要Activator来调用该方法。您可以直接使用 MethodInfo.Invoke 。第一个参数可以保留为空。

其他提示

GvS是正确的 - 以下是用法示例:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        Type type = Type.GetType("Foo");
        MethodInfo info = type.GetMethod("Bar");

        Console.WriteLine(info.Invoke(null, null));
    }
}

static class Foo
{
    public static String Bar() { return "Bar"; }
}

使用MethodInfo.Invoke

的另一个示例
Type myStaticClassType = Type.GetType("MyStaticClassNameSpace",true);
object[] myStaticMethodArguments = {object1,object2...};
MethodInfo myStaticMethodInfo = myStaticClassType.GetMethod("YourMethod");
var myStaticMethodResult = myStaticMethodInfo.Invoke(null,myStaticMethodArguments);

不是静态类没有实例,只是它没有任何公共构造函数。 Activator使用反射创建实例,当您使用反射时,您可以调用任何您想要的东西,甚至是私有构造函数

如果你的意思是说“资源”实际上是嵌入在程序集中的资源,你总是可以手动提取它们(参见 Assembly.GetManifestResourceStream()),而不使用静态类(因为你可以使用的唯一方法会有更多的问题)他们纯粹是有反思的。)

Spring.NET有一个很好的 IResource 抽象。

不, Activator 不能用于“创建”静态类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top