题
我正在抛弃使用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
不能用于“创建”静态类。
不隶属于 StackOverflow