激活器和静态类

时间:2009-03-05 13:58:39

标签: c# reflection static activator

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

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

5 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:16)

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"; }
}

答案 2 :(得分:5)

使用MethodInfo.Invoke

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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