문제

클래스의 객체를 만드는 코드는 어떻게 보입니까?

string myClass = "MyClass";

위의 유형의 다음 호출하십시오

string myMethod = "MyMethod";

그 목적에?

도움이 되었습니까?

해결책

예를 들어, 오류 확인이 없음 :

using System;
using System.Reflection;

namespace Foo
{
    class Test
    {
        static void Main()
        {
            Type type = Type.GetType("Foo.MyClass");
            object instance = Activator.CreateInstance(type);
            MethodInfo method = type.GetMethod("MyMethod");
            method.Invoke(instance, null);
        }
    }

    class MyClass
    {
        public void MyMethod()
        {
            Console.WriteLine("In MyClass.MyMethod");
        }
    }
}

각 단계마다 신중한 점검이 필요합니다. 유형을 찾지 못할 수도 있고 매개 변수가없는 생성자가 없을 수 있습니다. 메소드를 찾지 못할 수도 있고 잘못된 인수 유형으로 호출 할 수 있습니다.

주목할만한 점 : type.getType (String)는 현재 실행중인 어셈블리 또는 mscorlib에 있지 않은 한 유형의 어셈블리 자격 이름이 필요합니다.

다른 팁

.NET을 사용하여 동적 객체 생성 및 호출을 단순화하는 라이브러리를 만들었습니다. 라이브러리와 코드를 Google 코드에서 다운로드 할 수 있습니다. 늦은 바인딩 도우미프로젝트에서 당신은 a를 찾을 수 있습니다 사용량이있는 위키 페이지, 또는 이것을 확인할 수도 있습니다 CodeProject의 기사

내 라이브러리를 사용하면 예제가 다음과 같습니다.

IOperationInvoker myClass = BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass");
myClass.Method("MyMethod").Invoke();

또는 더 짧은 :

BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass")
     .Method("MyMethod")
     .Invoke();

유창한 인터페이스를 사용하고 이러한 종류의 작업을 진정으로 단순화합니다. 유용하다는 것을 알 수 있기를 바랍니다.

다음은 공개 생성자가있는 객체와 일부 값을 반환하지만 매개 변수를 가져 오지 않는 공개 메소드를 가정합니다.

var object = Activator.CreateInstance( "MyClass" );
var result = object.GetType().GetMethod( "MyMethod" ).Invoke( object, null );

클래스가 실행 어셈블리에 있다고 가정하면 생성자와 방법이 매개 변수가 없습니다.

Type clazz = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyClass");

System.Reflection.ConstructorInfo ci = clazz.GetConstructor(new Type[] { });
object instance = ci.Invoke(null); /* Send parameters instead of null here */

System.Reflection.MethodInfo mi = clazz.GetMethod("MyMethod");
mi.Invoke(instance, null); /* Send parameters instead of null here */
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top