我正在抛弃使用Activator类的想法,以便访问程序集中的资源,否则我将为(依赖注入)创建循环引用。我之前已经完成了我需要引用的vanilla类,但我的问题是:我可以使用Activator来访问静态类吗?
让我失望的部分是Activator返回对象的实例,而静态类没有实例。这可能吗?
答案 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
不能用于“创建”静态类。