문제
나는 어셈블리에서 리소스에 액세스하기 위해 활성기 클래스를 사용한다는 아이디어를 던지고있다. 나는 참조가 필요한 바닐라 수업으로 전에 해냈지만 내 질문은 다음과 같습니다. 활성기를 사용하여 정적 클래스에 액세스 할 수 있습니까?
나를 넘어 뜨리는 부분은 활성기가 당신에게 돌아온다는 것입니다. 사례 정적 클래스에는 인스턴스가없는 반면 객체의 경우. 이게 가능해?
해결책
방법을 호출하기 위해 활성기가 필요하지 않습니다. 너는 사용한다 MethodInfo.invoke 곧장. 첫 번째 매개 변수는 NULL로 남겨질 수 있습니다.
다른 팁
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