문제

나는 어셈블리에서 리소스에 액세스하기 위해 활성기 클래스를 사용한다는 아이디어를 던지고있다. 나는 참조가 필요한 바닐라 수업으로 전에 해냈지만 내 질문은 다음과 같습니다. 활성기를 사용하여 정적 클래스에 액세스 할 수 있습니까?

나를 넘어 뜨리는 부분은 활성기가 당신에게 돌아온다는 것입니다. 사례 정적 클래스에는 인스턴스가없는 반면 객체의 경우. 이게 가능해?

도움이 되었습니까?

해결책

방법을 호출하기 위해 활성기가 필요하지 않습니다. 너는 사용한다 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 정적 클래스를 "생성"하는 데 사용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top